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; ouo, 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 deseuturados 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 ouas 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 oua 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 funions) 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 conib
– 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 SQLSuured Query Language zzSeries
