NoSQL

[quote=andre_salvati][quote=kicolobo]Sem esquivar André :slight_smile:

Não teve nenhum caso até hoje em que o modelo relacional não se aplicava melhor pra você? Nenhuma experiência?[/quote]

Até tem, mas aí já vira consultoria… ;)[/quote]

Ara André! :smiley:

Não é consultoria man, é só pra enriquecer a discussão, ver os casos mais interessnates justamente pro pessoal poder ter uma compreensão melhor sobre o assunto.
Faz uma forcinha aí vai! :smiley:

[quote=andre_salvati][quote=kicolobo]Sem esquivar André :slight_smile:

Não teve nenhum caso até hoje em que o modelo relacional não se aplicava melhor pra você? Nenhuma experiência?[/quote]

Até tem, mas aí já vira consultoria… ;)[/quote]

andre_salvati uses flee.

[quote=Hebert Coelho][quote=andre_salvati][quote=kicolobo]Sem esquivar André :slight_smile:

Não teve nenhum caso até hoje em que o modelo relacional não se aplicava melhor pra você? Nenhuma experiência?[/quote]

Até tem, mas aí já vira consultoria… ;)[/quote]Ou então parece que alguém não quer dar o braço a torcer…

Desculpe entrar no meio, mas estou acompanhando e foi isso que me pareceu… ^^[/quote]

Eu estava justamente escrevendo algo parecido aqui…saídas pela tangente…

[quote=andre_salvati] Cada caso é um caso e deve ser analisado detalhamente, o que fica difícil em um fórum de discussões.

[…]

Coloca o seu caso atual aí para analisarmos…

[…]

Até tem, mas aí já vira consultoria
[/quote]

[quote=Hebert Coelho][quote=andre_salvati][quote=kicolobo]Sem esquivar André :slight_smile:

Não teve nenhum caso até hoje em que o modelo relacional não se aplicava melhor pra você? Nenhuma experiência?[/quote]

Até tem, mas aí já vira consultoria… ;)[/quote]Ou então parece que alguém não quer dar o braço a torcer…

Desculpe entrar no meio, mas estou acompanhando e foi isso que me pareceu… ^^[/quote]

Já disse que não existe BALA DE PRATA.

SQL ainda é válido em alguns casos, mas seria bom considerarem seriamente uma solução NoSQL no seu próximo projeto.

Não sabe avaliar se é melhor ou não?? Chame quem já apanhou para dar uma ajuda… :wink:

[quote=andre_salvati][quote=Hebert Coelho][quote=andre_salvati][quote=kicolobo]Sem esquivar André :slight_smile:

Não teve nenhum caso até hoje em que o modelo relacional não se aplicava melhor pra você? Nenhuma experiência?[/quote]

Até tem, mas aí já vira consultoria… ;)[/quote]Ou então parece que alguém não quer dar o braço a torcer…

Desculpe entrar no meio, mas estou acompanhando e foi isso que me pareceu… ^^[/quote]

Já disse que não existe BALA DE PRATA.

SQL ainda é válido em alguns casos, mas seria bom considerarem seriamente uma solução NoSQL no seu próximo projeto.

Não sabe avaliar se é melhor ou não?? Chame quem já apanhou para dar uma ajuda… :wink:

[/quote]

Ou usa a planilha do colega aí…kkkkk

[quote=andre_salvati][quote=andre_salvati][quote=Hebert Coelho][quote=andre_salvati][quote=kicolobo]Sem esquivar André :slight_smile:

Não teve nenhum caso até hoje em que o modelo relacional não se aplicava melhor pra você? Nenhuma experiência?[/quote]

Até tem, mas aí já vira consultoria… ;)[/quote]Ou então parece que alguém não quer dar o braço a torcer…

Desculpe entrar no meio, mas estou acompanhando e foi isso que me pareceu… ^^[/quote]

Já disse que não existe BALA DE PRATA.

SQL ainda é válido em alguns casos, mas seria bom considerarem seriamente uma solução NoSQL no seu próximo projeto.

Não sabe avaliar se é melhor ou não?? Chame quem já apanhou para dar uma ajuda… :wink:

[/quote]

Ou usa a planilha do colega aí…kkkkk[/quote]Ou então dê uma resposta evasiva… -_-’’

Bom gente, andando por pisos mais sólidos, alguém aqui já experimentou problemas interessantes com bases NoSQL que acabaram por fazerem voltar a avaliar o modelo relacional como solução?

É interessante termos este tipo de situação pra podermos discutir e entender melhor a questão.

[quote=andre_salvati][quote=andre_salvati][quote=Hebert Coelho][quote=andre_salvati][quote=kicolobo]Sem esquivar André :slight_smile:

Não teve nenhum caso até hoje em que o modelo relacional não se aplicava melhor pra você? Nenhuma experiência?[/quote]

Até tem, mas aí já vira consultoria… ;)[/quote]Ou então parece que alguém não quer dar o braço a torcer…

Desculpe entrar no meio, mas estou acompanhando e foi isso que me pareceu… ^^[/quote]

Já disse que não existe BALA DE PRATA.

SQL ainda é válido em alguns casos, mas seria bom considerarem seriamente uma solução NoSQL no seu próximo projeto.

Não sabe avaliar se é melhor ou não?? Chame quem já apanhou para dar uma ajuda… :wink:

[/quote]

Ou usa a planilha do colega aí…kkkkk[/quote]

Ou vai na sorte #flame

[quote=kicolobo]Bom gente, andando por pisos mais sólidos, alguém aqui já experimentou problemas interessantes com bases NoSQL que acabaram por fazerem voltar a avaliar o modelo relacional como solução?

É interessante termos este tipo de situação pra podermos discutir e entender melhor a questão.[/quote]

Na verdade, Kiko grande mestre, só usei NoSql duas vezes: um era graphos porque eu precisava travalhar com relacionamentos em um lvl muito profundo, ficar indo e vindo pelas relações. Aí achei que era uma boa idéia. A segunda opção foi por que eu fiz um mini crawler e não vi motivos para usar sql, e pq ficava na nuvem e tal, “na nuvem é mais simples noSql” e tal.

Em todos os outros casos da minha loooonga vida de dev eu sempre vi Sql como uma boa saida e sem motivos para não usar.
PS: tenho só 21 anos e 3 de carreira, não passei por muitas coisas assim

[quote=YvGa][quote=fredferrao]
Qual seria o peso de um banco relacional?
[/quote]

Voce ter toda a estrutura do teu modelo duplicada num banco de dados, com todas as suas gambiarras/mapeamento para que esta estrutura se encaixe ao modelo relacional.

Sim, assim como num modelo OO, um funcionario tem N dependentes e não N chaves estrangeiras apontando para dependentes. Quando voce guarda o seu funcionario, guarda junto com ele os seus dependentes.

Se voce estava se referindo a relacao entre funcionarios de cargos distinto, como o funcionario gerente e o funcionario operador, talvez então ele se encaixe no outro topico do kikolobo. Naquele em que diz que redundancia eh um problema. E nesse caso entao o uso do banco relacional seja mais efetivo.[/quote]

Mas mesmo no modelo OO, os dependentes estão numa estrutura separada, no caso um List, e o BD no caso esta em uma tabela a parte, até existe alguns BD’s que tem o tipo Array, só não sei se é conveniente usar.

Sobre lazy loading, bom, lazy tem seus motivos, performance, trafego de dados, etc, e creio que esta questão é inerente a ser relacional ou não, por exemplo em um MongoDB da vida, como ficaria? SEMPRE que puxarmos um Funcionario ou uma NotaFiscal, todos os dependentes/itens virão?? Independente se vamos usar naquele momento ou não? Imagina alguma coisa com 100 dependentes, como ficaria isto ja que esta tudo mo mesmo Documento?

[quote=kicolobo]Bom gente, andando por pisos mais sólidos, alguém aqui já experimentou problemas interessantes com bases NoSQL que acabaram por fazerem voltar a avaliar o modelo relacional como solução?

É interessante termos este tipo de situação pra podermos discutir e entender melhor a questão.[/quote]

Apenas para complementar, eu gostaria de fazer a pergunta inversa :
Quais foram os problemas que já enfrentaram com bancos relacionais que foram resolvidos com NoSql ?

Eu não cheguei a implementar projetos com NoSQL, mas vi o Sql patinar quando precisei:

  • Controlar hierarquia de auto-relacionamento, como responder quem é o chefe do chefe do chefe…

  • Atributos variáveis e opcionais para as mesmas entidades ( a tabela esparsa que é citada no post).
    Utilizar aquela técnica de EAV costuma causar graves problemas de performance.

[quote=AbelBueno][quote=kicolobo]Bom gente, andando por pisos mais sólidos, alguém aqui já experimentou problemas interessantes com bases NoSQL que acabaram por fazerem voltar a avaliar o modelo relacional como solução?

É interessante termos este tipo de situação pra podermos discutir e entender melhor a questão.[/quote]

Apenas para complementar, eu gostaria de fazer a pergunta inversa :
Quais foram os problemas que já enfrentaram com bancos relacionais que foram resolvidos com NoSql ?

Eu não cheguei a implementar projetos com NoSQL, mas vi o Sql patinar quando precisei:

  • Controlar hierarquia de auto-relacionamento, como responder quem é o chefe do chefe do chefe…

  • Atributos variáveis e opcionais para as mesmas entidades ( a tabela esparsa que é citada no post).
    Utilizar aquela técnica de EAV costuma causar graves problemas de performance.

[/quote]

Abel, EXCELENTE pergunta.

Vamos às respostas:

Eu constantemente passo por um problema (que inclusive ilustrei no meu post http://www.itexto.net/devkico/?p=1199) que é o de ter tabelas muito esparsas no banco de dados.
O que acontecia: eu precisava lidar com diversos registros pertencentes a um determinado tipo (equipamento pra ilustrar), e que eram salvos em uma base relacional.
Problema: cada um com seus próprios tipos de atributo e, pra piorar, que podiam variar o tempo inteiro. Então surgiam colunas que eram usadas em, por exemplo, um registro.
Pra resolver o problema, a outra abordagem seria criar uma estrutura muito complicada envolvendo meta-informações, contendo quais os campos que cada tipo de equipamento tinha… Uma meleca.
E o interessante é que temos um software gigantesco (Smartplant, da Intergraph) que funciona exatamente assim: tabelas ultra esparsas, com milhões de registros nos quais há colunas usadas por um, dois registros.

O modelo documental sem esquema resolveu o problema, porque assim eu podia armazenar todos os atributos que eu quisesse para cada equipamento de uma forma muito mais simples e fácil. E com a vantagem de que não precisava de joins complicados e este tipo de monstruosidade.

Outro caso em que o modelo relacional se mostrou limitado para mim (e ainda se mostra) diz respeito a soluções nas quais eu precise lidar com grafos. Por exemplo: um sistema de comissionamento. Comissionamento é o processo de teste de todos os equipamentos que vão fazer parte de uma planta. Para que a planta funcione direito, é necessário que seus dependentes também estejam ok, e por aí vai.
No modelo relacional representar grafos é bastante complicado. Questões do tipo: “me mostre as dependências de suas dependências” é complicado de implementar.
Usando o Neo4J, baseados em grafos, fica banal.

Como pode ver, são questões em que o seu domínio não é bem representado pelo relacional, ou seja, naqueles casos em que você vai além da visão bidimensional da tabela, ou que precisaria de tantas junções pra obter o mesmo resultado que simplesmente não justifica.

No entanto, em minha experiência estes se mostraram casos raros, bem raros mesmo infelizmente. Pra todos os outros, existe o relacional (desculpa MasterCard). :slight_smile:

[quote=AbelBueno][quote=kicolobo]Bom gente, andando por pisos mais sólidos, alguém aqui já experimentou problemas interessantes com bases NoSQL que acabaram por fazerem voltar a avaliar o modelo relacional como solução?

É interessante termos este tipo de situação pra podermos discutir e entender melhor a questão.[/quote]

Apenas para complementar, eu gostaria de fazer a pergunta inversa :
Quais foram os problemas que já enfrentaram com bancos relacionais que foram resolvidos com NoSql ?

Eu não cheguei a implementar projetos com NoSQL, mas vi o Sql patinar quando precisei:

  • Controlar hierarquia de auto-relacionamento, como responder quem é o chefe do chefe do chefe…

  • Atributos variáveis e opcionais para as mesmas entidades ( a tabela esparsa que é citada no post).
    Utilizar aquela técnica de EAV costuma causar graves problemas de performance.

[/quote]

Eu gostaria muito de ter usado NoSQL neste cenário:

1- Dados eram consumidos de um webservice externo
2- Os dados eram gravados em um schema do banco
3- Posteriormente, esses dados gravados eram convertidos para um outro schema do banco a fim de alimentar um sistema legado

O passo 2 poderia ser feito com uma base usando Document pois o webservice mandava dados que não seguiam um formato bem definido para termos um schema confável. Por causa disso, toda hora precisávamos fazer alterações no schema. Sem contar os relacionamentos que vinham furados porque os dados estavam incompletos em alguns casos. Tínhamos tabelas com mais de 50 campos onde somente 3 ou 4 eram preenchidos, tabelas que nunca eram populadas, e por aí vai…

Talvez tenha sido melhor efetuar as conversões no momento do acesso ao webservice (é aquela velha história de “quando eu cheguei estava assim, só terminei a bagaça”) mas é um exemplo de uso do NoSQL.

[quote=kicolobo]No modelo relacional representar grafos é bastante complicado. Questões do tipo: “me mostre as dependências de suas dependências” é complicado de implementar.
Usando o Neo4J, baseados em grafos, fica banal.[/quote]

Me veio à cabeça, com esse exemplo, os gerenciadores de pacotes do Linux.

[quote=Ataxexe][quote=kicolobo]No modelo relacional representar grafos é bastante complicado. Questões do tipo: “me mostre as dependências de suas dependências” é complicado de implementar.
Usando o Neo4J, baseados em grafos, fica banal.[/quote]

Me veio à cabeça, com esse exemplo, os gerenciadores de pacotes do Linux.[/quote]

Boa!

[quote=fredferrao]
Sobre lazy loading, bom, lazy tem seus motivos, performance, trafego de dados, etc, e creio que esta questão é inerente a ser relacional ou não, por exemplo em um MongoDB da vida, como ficaria? SEMPRE que puxarmos um Funcionario ou uma NotaFiscal, todos os dependentes/itens virão?? Independente se vamos usar naquele momento ou não? Imagina alguma coisa com 100 dependentes, como ficaria isto ja que esta tudo mo mesmo Documento?[/quote]

Sim, vem todos pra memoria. Pra que isso representasse realmente algum peso para aplicação precisariam milhoes e milhoes de dependentes/itens.

O lazy não é exatamente para que eu não traga os dependentes/itens de um funcionario/nota, mas para que eu não suba o banco inteiro pra memoria em uma consulta por id. Porque a nota tem os itens, os itens se relacionam aos produtos, os produtos, às categorias. A nota ao cliente, o cliente ao bairro, às formas de pagamento, às faturas vencidas, às por vencer, a outras notas.

Para isso existe o lazy load. Não para que eu economize e não traga alguns filhos, coisa que muito dificilmente vai fazer diferença, usando-os ou não.

Olá amiguinhos,

já tentaram uma ajudinha do Google?? :wink:

https://www.google.com/search?q=when+should+I+use+nosql&sugexp=chrome,mod=10&sourceid=chrome&ie=UTF-8

É engraçado como o brasileiro gosta de discutir as coisas sem fundamentos.

[quote=andre_salvati]Olá amiguinhos,

já tentaram uma ajudinha do Google?? :wink:

https://www.google.com/search?q=when+should+I+use+nosql&sugexp=chrome,mod=10&sourceid=chrome&ie=UTF-8

É engraçado como o brasileiro gosta de discutir as coisas sem fundamentos.[/quote]
Bom, você estava aqui discutindo até que te apertaram na parede e você não conseguiu mais escapar.

Até lá não era sem sentido?
O motivo do tópico não é porque não existem outras fontes de informação, todo mundo sabe que uma busca no google traz muitos resultados.

A ideia aqui é justamente ouvir opiniões de pessoas diferentes (enquanto em um blog, você lê a opinião de um), discutir experiências e (para aqueles que conseguem) aprender algo com tudo isso.

O fórum é livre pra quem quiser entrar, e do mesmo jeito, é livre pra quem quiser sair.

[quote=Rodrigo Sasaki][quote=andre_salvati]Olá amiguinhos,

já tentaram uma ajudinha do Google?? :wink:

https://www.google.com/search?q=when+should+I+use+nosql&sugexp=chrome,mod=10&sourceid=chrome&ie=UTF-8

É engraçado como o brasileiro gosta de discutir as coisas sem fundamentos.[/quote]
Bom, você estava aqui discutindo até que te apertaram na parede e você não conseguiu mais escapar.

Até lá não era sem sentido?
O motivo do tópico não é porque não existem outras fontes de informação, todo mundo sabe que uma busca no google traz muitos resultados.

A ideia aqui é justamente ouvir opiniões de pessoas diferentes (enquanto em um blog, você lê a opinião de um), discutir experiências e (para aqueles que conseguem) aprender algo com tudo isso.

O fórum é livre pra quem quiser entrar, e do mesmo jeito, é livre pra quem quiser sair.[/quote]

Vai treinando aqui no fórum. Vc vai ficar bom em NoSQL… :wink:

Opa, obrigado pela dica! :slight_smile: