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