题
我正试图围绕像CouchDB和Cassandra这样的Key-Value商店。我明白为什么它们很有用但是就它们如何替换像MySql这样的RDBMS而言,我不明白它。
让我们说这是我需要存储的内容:
{123456: {'model' : 'Ford'
'color': 'blue'
'MPG': 23}}
然后我需要找到所有蓝色的汽车。
Key-Value商店如何使用该值查询密钥?我读了一些可以使用map-reduce的地方,但是看了几个项目的来源,我找不到一个例子。
如果我问的是正确的问题,请告诉我。
解决方案
基本上,当您使用键值存储时,您正在使用关系数据库内部具有的相同组件构建数据库。这样做的原因是为了在缩放和性能方面拥有更多的控制和灵活性,或者仅仅是为了直截了当。
在这种情况下,您需要将表行和索引的等效项存储为两个单独的东西。因此,如果要对颜色进行索引,则需要存储
{'blue': {123456}}
相当于索引表。
当然,一些键值存储为您提供索引和搜索机制,因此没有适合所有情况的通用规则。
其他提示
您可能希望维护一个基本上是索引的单独键/值存储。它将具有“蓝色”。作为密钥,然后是来自“主”的所有ID的列表。汽车店是蓝色的。
是的,这是复制常规rdbms的索引功能。
这是一篇很好的文章,讲述了FriendFeed团队如何解决这个问题,并确定了这个解决方案及其基本原理(我知道,因为他们使用RDBMS作为键/值存储而有点奇怪,但谈话要点是声音理论):
http://bret.appspot.com/entry/how-friendfeed-uses- MySQL的
不隶属于 StackOverflow