Le 2011-O-16  19h55, Bruno Silva a écrit :
>
> E seguindo essa premissa vou a outro ponto, que a meu ver é um dos
> grandes pontos para os NoSQL terem uma performance razoável é o fato
> de que ele não permite ao Desenvolvedor/Programador, como direi, fazer
> as consultas da forma que bem entender, todas as chamadas são feitas
> através de API's disponibilizadas pelo próprio MongoDB, o que evita
> consultas mal escritas e força a utilização dos recursos do banco.

Ahn… na verdade, a questão é outra.

        Em todos os sistemas prerrelacionais, inclusive os da moda NoSQL atual 
— nas últimas três décadas isso já se chamou de modelo hierárquico, de 
redes ou de grafos; multivalorado; BDOO e vai por aí afora, cada poucos 
anos isso morre e ressuscita com outro nome — não existe o que chamamos 
de independência de dados.  Ou seja, o modelo lógico e o modelo físico 
estão amarrados, porque não existe um modelo conceitual de dados que 
independa dos detalhes de implementação.

        Isso faz com que o desempenho esteja amarrado à adequação do modelo de 
dados físico e da programação à combinação entre aplicação principal e 
tecnologia.  Mude a tecnologia (em menor grau) ou, principalmente, a 
aplicação, e corre-se o risco de ter de mudar o modelo de dados e, 
conseqüentemente, a programação.

        Já no SQL, apesar de várias limitações arbitrárias em relação ao modelo 
relacional, o DBA tem várias possibilidades de ajustar o comportamento 
físico e até o modelo físico para se ajustar a novas necessidades, tanto 
de mudança tecnológica quanto de mudanças no modelo de dados e no 
comportamento do sistema, para tirar o máximo possível em termos de 
desempenho sem comprometer a integridade dos dados.

        Por exemplo, se muda a escala de dados, as estatísticas coletadas 
automaticamente pelo sistema vai fazer com que mudem, automaticamente 
também, os planos de execução, que são compilados automaticamente pelo 
planejador (vulgo ‘otimizador’).  O mesmo acontece quando muda a 
tecnologia — por exemplo, a proporção entre o custo de uma busca 
seqüencial ou de uma busca aleatória, ou a quantidade de memória — e o 
DBA tem apenas de ajustar parâmetros do SGBD ou dos espaços de tabelas 
(/tablespaces/).

        Já nos sistemas prerrelacionais como os ditos NoSQL, mudou algo?  Muda 
a programação, quase que inevitavelmente.



> E lembrei que uma vez um DBA Oracle comentava que não adiantava se ter
> um Oracle se você não utilizar os recursos do banco, no caso ele não
> se referia a Archive Logs ou outros, ele falava de Stored's e afins.

Hm… imagino que queiras dizer programação procedural em PL/SQL.  Na 
verdade, isso depõe contra o Oracle, que tem apenas uma linguagem 
proprietária para programar procedimentos armazenados, em vez de 
implementar o ISO SQL/PSM.  No caso do PostgreSQL, além de termos uma 
versão do PL/SQL chamada PL/PgSQL, temos a ISO SQL/PSM e toda uma 
variedade de outras linguagens disponíveis.

        Outra coisa que depõe contra o Oracle é que várias vezes se usam 
procedimentos armazenados e outras técnicas não declarativas, como 
/hints/ (dicas dadas pelo programador para forçar um caminho de 
execução) para contornar deficiências do SGBD.  No PostgreSQL, 
procura-se aperfeiçoar o comportamento do planejador e incrementar o 
suporte à modelagem, ou seja, à programação declarativa.  Ainda faltam 
muitas coisas para se aproximar do ideal relacional, e o SQL em si 
atrapalha ao violar o modelo, mas é uma abordagem muito mais sã.


> Então se o NoSQL obriga ao desenvolvedor usar os recursos do mesmo,
> ele tende a ter uma performance melhor.

Na verdade, não.  Ele tem um desempenho /adequado/, não /melhor/, se e 
quando o programador consegue, no projeto, ter uma visão adequada tanto 
do comportamento das aplicações quanto da arquitetura do sistema.  Isso, 
normalmente, só acontece numa reescrita dum sistema que já alcançou os 
limites da primeira (ou segunda) implementação, ou seja, por fracassos 
anteriores.  Geralmente quando se usa MySQL (que não escala sem cirurgia 
interna) ou algum SGBD proprietário (que é muito caro para escalar).

        A ironia é que, se o sistema começou com PostgreSQL, normalmente não 
precisaria reescrever, poder-se-ia simplesmente ir ajustando a 
arquitetura, possivelmente usando até tecnologias de implementação 
normalmente associadas a sistemas prerrelacionais como os NoSQL, como 
por exemplo índices invertidos (GIN e GIST), tipos extendidos pelo 
usuário (CREATE TYPE) ou até mapear e reduzir.

        Se um sistema não está escalando em SQL, pode até ser por causa de uma 
das várias limitações impostas pelo SQL em relação ao modelo relacional 
— caso em que poder-se-ia justificar o uso dum modelo prerrelacional —, 
mas normalmente é por más decisões arquiteturais, como uso de MySQL ou 
de SGBDs proprietários (que custam caro para escalar), falta de uso dos 
recursos do sistema (uso indiscriminado de servidores de aplicação e 
[ou] ORM, uso de tipos restrito aos predefinidos &c.), ou, o caso mais 
comum, modelagem inadequada, por exemplo sem normalização avançada 
(vulgo ‘desnormalização’, geralmente precoce), sem declaração de chaves 
naturais &c.


-- 
skype:leandro.gfc.dutra?chat      Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61) 3546 7191              gTalk: xmpp:[email protected]
+55 (11) 9406 7191        ICQ/AIM: aim:GoIM?screenname=61287803
BRAZIL GMT-3  MSN: msnim:[email protected]
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a