Pergunta

No trabalho, que recentemente iniciou um projeto usando CouchDB (um banco de dados orientado a documentos). Eu tenho tido um tempo difícil un-learning todo o meu conhecimento db relacional.

Eu queria saber como alguns de vocês superaram esse obstáculo? Como você parar de pensar relacionalmente e começar a pensar documentalmente (Peço desculpas por fazer-se essa palavra).

Todas as sugestões? dicas úteis?

Editar :. Se faz alguma diferença, estamos usando Ruby & CouchPotato para se conectar ao banco de dados

Editar 2 : SO estava me incomodando para aceitar uma resposta. Eu escolhi o que me ajudou a aprender mais, eu acho. No entanto, não há nenhuma resposta real "correta", suponho.

Foi útil?

Solução

Eu acho que, depois de olhar sobre em um par de páginas sobre este assunto, tudo depende dos tipos de dados que você está lidando.

RDBMSes representam uma abordagem de cima para baixo, onde você, o designer de banco de dados, afirmam a estrutura de todos os dados que existem no banco de dados. Você define que uma pessoa tem um primeiro, último, nome do meio e um endereço residencial, etc. Você pode aplicar isso usando um RDBMS. Se você não tem uma coluna para uma pessoa do planeta natal, azar wanna-be-Pessoa que tem um homeplanet diferente do que a Terra; você vai ter que adicionar uma coluna em uma data posterior ou os dados não podem ser armazenados no RDBMS. A maioria dos programadores fazer suposições como este em seus aplicativos, portanto, este não é uma coisa burra para assumir e fazer cumprir. coisas que definem pode ser bom. Mas se você precisa se logar atributos adicionais no futuro, você vai ter que adicioná-los. O modelo de relação pressupõe que seus atributos de dados não vai mudar muito.

"nuvem" escreva bases de dados usando algo como MapReduce, no seu caso CouchDB, não fazer a suposição acima, e, em vez olhar para os dados de baixo para cima. Os dados são introduzidos nos documentos, o que poderia ter qualquer número de atributos diferentes. Assume-se que os seus dados, por sua própria definição, é diversificada nos tipos de atributos que poderia ter. Ele diz: "Eu só sei que eu tenho esse documento no banco de dados Pessoa que tem um atributo homeplanet de 'Eternium' e um FirstName de 'Senhor Nibbler' mas sem sobrenome." Isso se encaixa modelo páginas: todas as páginas são um documento, mas o conteúdo / Tags / teclas reais do documento variam soo muito que você não pode encaixá-los dentro da estrutura rígida que os DBMS pontificados de cima alto. É por isso que o Google acha que os soxors roxors modelo MapReduce, porque conjunto de dados do Google é tão diverso que precisa para construir em para a ambigüidade a partir do get-go, e devido às grandes conjuntos de dados será capaz de utilizar o processamento paralelo (que MapReduce torna trivial) . O modelo de documento-base de dados assume que os atributos de seus dados pode / vai mudar muito ou ser muito diverso, com "lacunas" e um monte de colunas de baixa densidade populacional que se pode encontrar se os dados foram armazenados em um banco de dados relacional. Enquanto você poderia usar um RDBMS para armazenar dados como este, seria ficar feia muito rápido.

Para responder a sua pergunta, então: você não pode pensar "relacional" em tudo quando se olha para um banco de dados que usa o paradigma MapReduce. Porque, na verdade não tem uma relação forçada. É uma corcova conceitual você só vai ter que superar.


Um bom artigo Corri para que compara e contrasta os dois bancos de dados muito bem é MapReduce: um grande passo Voltar , que argumenta que os bancos de dados de paradigma MapReduce estão tecnológicas para trás passo, e são inferiores aos RDBMSes. Eu tenho que discordar com a tese do autor e diria que o designer de banco de dados que simplesmente tem que escolher o caminho certo para seu / sua situação.

Outras dicas

É tudo sobre os dados. Se você tiver dados que faz mais sentido relacional, uma loja de documento pode não ser útil. Um sistema típico baseado documento é um servidor de pesquisa, você tem um enorme conjunto de dados e quer encontrar um item específico / documento, o documento é estático, ou versão.

Em uma situação de tipo de arquivo, os documentos podem ser literalmente documentos, que não mudam e têm estruturas muito flexíveis. Não faz sentido para armazenar seus dados de meta em um banco de dados relacional, uma vez que todos eles são tão poucos documentos muito diferentes podem compartilhar essas tags. sistemas baseados em documentos não armazenar valores nulos.

Não-relacional / document-like dados faz sentido quando denormalized. Isso não muda muito ou você não se importa tanto sobre a consistência.

Se o seu caso de uso se encaixa um modelo relacional bem, então provavelmente não vale a pena apertando-o em um modelo de documento.

Aqui está um bom artigo sobre não relacional bancos de dados .

Outra maneira de pensar sobre isso é, um documento é uma linha. Tudo sobre um documento é nessa linha e é específico para esse documento. Linhas são fáceis de dividir, por isso escala é mais fácil.

Em CouchDB, como o Lotus Notes, você realmente não deve pensar em um documento como sendo análogo a uma linha.

Em vez disso, um documento é uma relação (tabela).

Cada documento tem um número de linhas - os valores de campo:

ValueID(PK)  Document ID(FK)   Field Name        Field Value
========================================================
92834756293  MyDocument        First Name        Richard
92834756294  MyDocument        States Lived In   TX
92834756295  MyDocument        States Lived In   KY

Cada View é uma consulta de referência cruzada, que seleciona através de uma maciça UNION ALL de de cada documento.

Assim, ainda é relacional, mas não no sentido mais intuitivo, e não no sentido de que mais importa:. Boas práticas de gestão de dados

bancos de dados orientados Documento não rejeitam o conceito de relações, eles só às vezes permitem aplicações desreferenciava as ligações (CouchDB) ou mesmo ter o apoio direto para as relações entre os documentos (MongoDB). O que é mais importante é que DODBs estão sem esquema. Em storages baseados em tabelas esta propriedade pode ser alcançado com uma sobrecarga significativa (ver resposta por richardtallent), mas aqui ele é feito de forma mais eficiente. O que realmente deve aprender quando se muda de um RDBMS a um DODB é esquecer mesas e começar a pensar sobre os dados. Isso é o que sheepsimulator chama a abordagem "bottom-up". É um esquema em constante evolução, e não um leito de Procusto predefinidos. Claro que isso não significa que esquemas deve ser completamente abandonado em qualquer forma. Seu aplicativo deve interpretar os dados, de alguma forma restringir a sua forma - isso pode ser feito através da organização de documentos em coleções, fazendo modelos com métodos de validação -. Mas agora é o trabalho do aplicativo

pode ser que você deve ler este http://books.couchdb.org/relax/getting-started

Eu mesmo só ouvi-lo e é interessante, mas não têm idéia de como implementadas que, na aplicação mundo real;)

Uma coisa que você pode tentar está ficando uma cópia do Firefox e firebug, e brincando com o Mapa e reduzir funções em JavaScript. eles estão realmente muito legal e divertido, e parecem ser a base de como fazer as coisas no CouchDB

aqui é pequeno artigo de Joel sobre o assunto: http: //www.joelonsoftware .com / itens / 2006/08 / 01.html

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