O elefante arborícola
Transcrição
O elefante arborícola
O elefante arborícola consultas recursⅳas com expreßões comuns de tabelas Leandro Guimarães Faria Corcete D Ⅲ Conferência brasileira de PostgreSQL () Sumário Sumário Introdução Abreviações Bibliografia Sumário Introdução Besteirol • NoSQL • SGBDs OO • SGBDs multⅳalorados • Prevayler • LDAP • … Chegou a nova temporada anual de besteirol — recentemente foi lançado o moⅵmento NoSQL. Embora eu não discuta que o ISO SQL esteja longe de ser a solução ideal para o problema da gestão de dados; que uma solução ideal, ou pelo menos relacional, está longe de ser implantada de forma amplamente disponível, em que pese a eⅺstência de pelo menos uma implementação pronta aproⅺmadamente relacional lⅳre, o Alphora Dataphor, e várias experimentais, como o Rel; e, embora há anos tente‐se substituir os SGBDs SQL por alguma coisa pretensamente melhor, quase todo ano, desde os anos noventa, aparece uma nova pretensa ‘solução’ para o problema da gestão de dados. Sem muito esforço, lembro‐me dos SGBDs OO; dos SGBDs multⅳalorados; do famigerado Prevayler; e, até, do LDAP sendo propostos para substituir o SQL, pretensamente com vantagens significativas na maioria ou, pelo menos, em grande parte dos casos. Desnecessário dizer que ainda estão longe de representar qualquer nicho significatⅳo seja de mercado, seja da comunidade acadêmica, embora esta última esteja, infelizmente, parcialmente contaminada pelo mercado. • Dificuldade de aprendizado – Não OO – Não parecido com C, Java c – Computacionalmente incompleto • Não lidar com dados ‘ricos’ ou ‘desestruturados’ • Não lidar com hierarquias • … • Mentiras! :-) Alguns problemas comuns apontados para o modelo relacional são, um, a dificuldade de aprendizado; ouo, a de lidar com dados ‘ricos’ ou ‘desestruturados’; e, finalmente, a dificuldade — alguns diriam, até, a ‘impossibilidade’ — de lidar com dados hierárquicos. • Forma mais simples já imaginada de lidar com dados • Modelo relacional é ortogonal com OO • SQL não é única implementação relacional possível • Dados ricos ou deseuturados são ortogonais (tipos) • SQL é computacionalmente completo desde o ISO SQL:… • …e o PostgreSQL, desde a versão .… • …graças à recursⅳidade (SQL) e funções de janela • Recursⅳidade nos dá hierarquia, grafos c! O interessante é que, já há tempos, nada disso é verdade. O modelo relacional nunca foi complicado, pelo menos não relatⅳamente a ouas soluções para a gestão de dados, tanto as mais antigas quanto as que apareceram desde que Codd publicou o modelo relacional; o modelo hierárquico é ortogonal à OO corretamente entendida, e o SQL não é a única implementação do modelo relacional, pode‐se mesmo argumentar que é deficiente — há implementações do modelo relacional que eⅵtariam problemas como o da impedância de tipos, e mesmo no SQL ele pode ser minorado com tipos abstratos de usuário, sendo que a grande limitação hoje está nas ferramentas OO, não no SQL nem no PostgreSQL; embora se possa argumentar que o ISO SQL é relatⅳamente complicado, ainda não ganhou espaço no mercado nenhuma oua linguagem de mais poderosa ou mais simples, em que pese a eⅺstência duma implementação lⅳre do modelo relacional, a D, do Dataphor — talvez por eßa implementação ser em .Net, e ainda não portada para Mono ou Portable.Net; e o ISO SQL é computacionalmente completo desde, pelo menos, o ano passado, com as funções de janela (window funions) do ISO SQL:. • Processamento externo – Caro em recursos — escalabilidade – Não relacional • Enumeração de caminhos materializados • Funções procedimentos armazenados • Conjuntos aninhados (nested sets) – Caro na escrita – Complicado – Estúpido • Oracle CONNECT BY – Antigo, e implementado no conib – Incomum, e obsoleto no Oracle gr • Recursⅳidade: expressões comuns de tabelas. Não espanta que haja quem diga que não dá para lidar com hierarquias no modelo relacional — a situação era desanimadora até muito recentemente, ainda mais levando em conta o domínio do Oracle no mercado, e que a velocidade de implementação do gr parece que será glacial… ainda há gente rodando Oracle , um número razoável rodando a versão , e muitos projetos ainda sendo desenvolⅵdos na versão . (gr), obsoleta há vários anos. Ou seja, muita gente continuará tendo problemas de escalabilidade com processamento externo, procedimentos armazenados, enumeração de caminhos materializados ou conjuntos aninhados — ou ficando restrita ao CONNECT BY, particular ao PostgreSQL e ao Oracle e obsoleto já há dez anos, desde ser publicado no ISO SQL: — tendo sido antecipado pelo menos desde . • Solução correta para o problema da hierarquia • Solução genérica: grafos c • Interessante: conjuntos de Mandelbrot, caⅸeiro‐ⅵajante c • Relacional (na medida do possível em SQL) • Necessária: computação sem recursⅳidade é manca A recursⅳidade é a solução correta para o problema da hierarquia. • Padrão ISO SQL: • prenunciado como a solução desde ao menos • relacional, ao menos em espírito e na prática • veloz, econômico… • e (relatⅳamente) simples • ISO SQL, Y Asaba, I Tatsuo, Jeff D, Gregory S, Tom L, Daⅵd F, comunidade japonesa A recursⅳidade está presente no padrão desde o ISO SQL:, e no PostgreSQL desde a versão ., com uma implementação inicial surpreendentemente madura, pela comunidade japonesa de PostgreSQL, a segunda mais importante do mundo — aliás, o Japão parece ser o primeiro país onde o PostgreSQL tem possibilidades de superar as plataformas proprietárias, já com inta por cento do mercado GNU/Linux de SGBDs, incluindo muitos casos de implementações em grande escala. É implementada na forma de uma consulta que chama a si mesma, a partir de uma condição inicial, até que determinada condição de encerramento se cumpra — e usando um mecanismo do ISO SQL: que é ainda mais genérico, e que vale a pena explorarmos primeiro. Abreviações ABDAdministrador de Bases de Dados ABDsAdministradores de Bases de Dados ADAdministrador de Dados DBADatabase Administrator DDLData Definition Language DERDiagrama de Entidades e Relacionamentos DERsDiagramas de Entidades e Relacionamentos etc[&c]et cœtera IBMInternational Business Machines ISOInternational Standards Organisation MRModelo Relacional MSMicroSo MVSMultiple Virtual Storage MVTMultiprogramming with a Variable number of Tasks MySQLMy W SQL OOOrientação a Objetos OSOperating System PSMPersistent Stored Modules SANStorage Area Network SANsStorage Area Networks SGBDSistema Gestor de Bases de Dados SGBDsSistemas Gestores de Bases de Dados SQLSuured Query Language zzSeries