Pergunta

Eu tenho ouvido falar muito de esquema (muitas vezes distribuídos) sistemas de banco de dados como o MongoDB, CouchDB, o SimpleDB, etc...

Enquanto eu entendo que eles podem ser importantes para algumas finalidades, a maior parte das minhas aplicações que eu estou tentando manter objetos que possuem um determinado número de campos de um tipo específico, e eu automaticamente penso que no modelo relacional.Estou sempre a pensar em termos de linhas com o número inteiro exclusivo ids, null/not null campos, tipos de dados SQL e consultas select para encontrar conjuntos.

Enquanto eu estou atraído para a natureza distribuída e fácil JSON/RESTful interfaces destes novos sistemas, eu não entendo como digitados chave/valor hashes vai me ajudar com o meu desenvolvimento.Por que um soltas datilografadas, sem esquema do sistema ser bom para manter limpo conjuntos de dados?Como posso, por exemplo, encontrar todos os itens com datas entre x e y quando eles podem não ter datas?Existe algum conceito de uma associação?

Eu entendo que muitos sistemas têm as suas próprias diferenças e pontos fortes, mas eu estou querendo saber a diferença de paradigma.Acho que esta é uma questão aberta, mas, talvez, a comunidade do respostas e maneiras de ter visto pessoalmente as vantagens destes sistemas vai ajudar a iluminar-me e outros sobre o que eu iria querer fazer uso destas (reconhecidamente mais de quadril) de sistemas, em vez do tradicional RDBMS.

Foi útil?

Solução

Eu vou chamar um ou dois motivos comuns (tenho certeza que as pessoas serão redação respostas)

  1. Altamente sistemas distribuídos, qualquer conjunto de dados podem ser distribuídos em vários servidores.Quando isso acontece, o relacional restrições que o mecanismo de banco de dados pode garantir-se muito reduzida. Alguns de sua integridade referencial precisará ser tratada no código do aplicativo.Ao fazer isso, você vai descobrir rapidamente vários pontos de dor:

    • sua lógica é transmitida através de várias camadas (aplicação e banco de dados)
    • sua lógica é espalhada em vários idiomas (SQL e seu aplicativo de idioma de escolha)

    O resultado é que a lógica é menos encapsulado, menos portátil, e MUITO mais caro para a mudança.Muitos devs encontrar-se a escrever a mais lógica no código do aplicativo e menos no banco de dados.Levado ao extremo, o esquema de banco de dados torna-se irrelevante.

  2. Esquema de gestão—especialmente em sistemas onde o tempo de inatividade não é uma opção—é difícil.reduzindo o esquema complexidade reduz essa dificuldade.

  3. ÁCIDO não funciona muito bem para sistemas distribuídos (BASE, PAC, etc.).A linguagem SQL (e todo o modelo relacional para um certo ponto) é otimizado para um transacional ÁCIDO mundo.Por isso, alguns dos recursos de linguagem do SQL e melhores práticas são inúteis, enquanto outros são realmente prejudiciais.Alguns desenvolvedores se sentem à vontade para falar de "contra a corrente" e preferem deixar SQL inteiramente em favor de uma linguagem que foi projetado desde o início para os seus requisitos.

  4. Custo:a maioria dos sistemas RDBMS não são livres.Os líderes em escala (Oracle, Sybase, SQL Server) são todos os produtos comerciais.Ao lidar com grandes web ("web escala") de sistemas, banco de dados de custos de licenciamento pode atender ou exceder os custos de hardware!Os custos são altos o suficiente para alterar o normal de construir/comprar considerações drasticamente para a construção de uma solução personalizada, no topo de uma OSS oferta (todos os significativas NOSQL ofertas são OSS)

Outras dicas

A esquema é ótima por dois motivos:

  1. Intuitividade de otimização de cérebro do armazenamento de documentos
  2. Resolve Matriz esparsa e Entidade-atributo-valor Problemas de armazenamento.

Eu usei o SQL e o NO-SQL para aplicações de produção no Ruby on Rails. Não sou um especialista em banco de dados e tenho que confessar o Google Octer e termos semelhantes, pois eles não estão familiarizados para mim.

"Ah ha! Outro seguidor de tendências de saber no último movimento", você pode dizer. Mas, na verdade, estou realmente satisfeito com minha decisão de usar o MongoDB em nosso aplicativo mais recente de 2 anos e aqui está o porquê ...

O lado da intuitividade de otimização do cérebro foi a minha experiência com o sistema de comércio eletrônico Magento. Não quero bater isso porque me serviu bem na época, mas realmente atingiu o processador tentando calcular os atributos de cada produto. O motivo subjacente foi o armazenamento de valor de valor de entidade-atributo dos dados do produto. Cache ou ser condenado foi a solução.

A principal vantagem para mim é a otimização no único lugar que realmente importa - Seu próprio cérebro. Muitas tecnologias são criticadas por sua eficiência na memória, processadores, hardware e ainda ter um banco de dados extremamente intuitivo para entender traz seus próprios méritos. Descobrimos que é rápido adicionar recursos ao nosso código, porque o banco de dados simplesmente se parece muito com o mundo real que estamos modelando. Quando pedi aos clientes de comércio eletrônico que me apresentassem sua lista de produtos, eles naturalmente tendem a usar o Excel (pense em loja de tabela). As primeiras colunas são fáceis:

  1. Nome do Produto
  2. Preço
  3. Tipo de Produto (

Então fica mais difícil e coberto de notas, codificação de cores e links para outras mesas (sim .. relacionamentos)

  1. Cor (apenas alguns produtos)
  2. Tamanho (x grande, grande, pequeno) - apenas para produtos 8'9'10, os tacos de golfe usam uma escala diferente
  3. Cor 2. Os colares de gato têm duas opções de cores.
  4. Wattage
  5. Tipo de fixação (homem, mulher)

Portanto, termina em uma terrível bagunça das mesas do Excel que não faz sentido para mim e não há muito sentido para as pessoas que trabalham com os produtos dia após dia. Nós jogamos nossos braços no ar e decidimos passar pelo catálogo e depois me atinge! Não seria ótimo se você pudesse armazenar os dados como aparecem no catálogo!? Apenas coleções de registros em cada produto que apenas lista o atributo desse produto. Você pode escolher atributos comuns para indexar para recuperação posteriormente. Claro, essa é uma loja de documentos.

Em resumo, as lojas de documentos são ótimas quando você tem um problema escasso da matriz ou objetos que sofrem seus atributos ao longo do tempo. Tendo vivido em um mundo NO-SQL por 2 anos, não consigo pensar em um aplicativo do mundo real que não tenha esses recursos porque o próprio mundo se parece com uma loja de documentos.

A principal preocupação deve ser o que você precisa fazer com seus dados. Se você tem um enorme conjunto de dados e está encontrando um RDBMS tradicional para ser um gargalo, então convém experimentar uma esquema ou aa Nosql solução.

A maioria dos ambientes que estou ciente de usar Nosql As soluções também usam uma solução RDBMS de alguma forma ou moda. As soluções baseadas em RDBMs são a norma em que a integridade dos dados é extremamente importante e você precisa de transações ácidas. No entanto, se o seu sistema não for altamente baseado em transações, mas você precisará escalar ou dimensionar bem rápido, um Nosql a solução pode ser desejável.

Eu só brinquei com o MongoDB, mas uma coisa que realmente me interessou foi como você poderia aninhar documentos. Em MongoDB, um documento é basicamente como um recorde. Isso é muito bom, porque tradicionalmente, em um RDBMS, se você precisava puxar um registro de "pessoa" e obter o endereço associado, informações do empregador etc. Você freqüentemente precisava ir a várias tabelas, junte -se a eles, fazer vários bancos de dados chamadas. Em uma solução NoSQL como o MongoDB, você pode apenas aninhar os registros associados (documentos) e não precisar mexer com chaves estrangeiras, ingressar em várias chamadas de banco de dados. Tudo associado a esse registro é puxado.

Isso é especialmente útil ao lidar com objetos. Em muitos casos, você pode apenas armazenar um objeto como uma série de documentos aninhados.

Os bancos de dados NoSQL não são esquemados; O esquema está incorporado aos dados. Eles são devidamente chamados de semiestruturados. Em algumas lojas de dados KV, no entanto, o esquema pode até ser incorporado no código. A vantagem da abordagem semiestruturada é duas vezes: flexibilidade na qual as colunas fazem parte de uma linha (uma linha pode ter 5 colunas e outra tem 5 colunas diferentes e flexibilidade nas características das colunas (por exemplo, comprimentos variáveis)

Normalmente, a atração é a do óleo de cobra - a maioria das pessoas os favoreceu não tem idéia do teorema relacional e fala SQL em um nível que faz com que os profissionais vomitem. Não tenho idéia de quais são as condições do ácido, ehy, elas são importantes etc.

Não dizendo que eles não têm usos válidos ... apenas dizendo que principalmente a atração é as pessoas que não sabem o que devem saber e tirar conclusões estúpidas. Novamente, nem todo mundo é assim, mas a maioria dos desenvolvedores os favorece - não é boa para entender pelo qual um sistema de banco de dados é responsável.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top