Compreender lojas Chave-Valor
Pergunta
Eu estou tentando envolver minha cabeça em torno lojas Chave-Valor como CouchDB e Cassandra. Eu entendo por que eles são úteis, mas, tanto quanto como eles substituem um RDBMS como MySql, eu não consegui-lo.
Vamos dizer que este é o meu que eu preciso para armazenar:
{123456: {'model' : 'Ford'
'color': 'blue'
'MPG': 23}}
Então eu preciso encontrar todos os carros que são azuis.
Como é que a loja Key-Value consulta as chaves usando o valor? Eu li em algum lugar pode ser usado que Map-Reduce mas olhando para a fonte de alguns projectos não consigo encontrar um exemplo.
Deixe-me saber se eu estou pedindo a pergunta certa.
Solução
Essencialmente, quando você estiver usando lojas de valor-chave, você está construindo uma base de dados com os mesmos componentes que um banco de dados relacional tem internamente. A razão para fazer isso é ter mais controle e flexibilidade sobre dimensionamento e desempenho, ou apenas por simplicidade.
Neste caso, você precisa armazenar o equivalente das linhas da tabela e o índice como duas coisas separadas. Então, se você deseja indexar na cor, então você precisa loja
{'blue': {123456}}
no equivalente de uma tabela de índice.
É claro, algumas lojas de valor-chave fornecem indexação e busca mecanismos para você, assim não há nenhuma regra geral que cabe tudo.
Outras dicas
Você gostaria de manter um armazenamento de chave / valor separado que é essencialmente um índice. Ele teria "azul" como a chave e, em seguida, uma lista de todos os IDs do "principais" carros loja que são azuis.
Sim, isso é duplicar a funcionalidade índice de um RDBMS regulares.
Este é um bom artigo sobre como a equipe FriendFeed abordado este problema e estabeleceu-se sobre esta solução, juntamente com a sua lógica (eu sei, um pouco estranho, já que eles usaram um RDBMS como um armazenamento de chave / valor, mas os pontos de discussão são teoria de som):
http://bret.appspot.com/entry/how-friendfeed-uses- mysql