了解键值存储

时间:2009-10-23 13:08:25

标签: couchdb key-value

我正试图围绕像CouchDB和Cassandra这样的Key-Value商店。我理解为什么它们很有用,但就它们如何替换像MySql这样的RDBMS而言,我不明白它。

让我们说这是我需要存储的内容:

{123456: {'model' : 'Ford'
          'color': 'blue'
          'MPG': 23}}

然后我需要找到所有蓝色的汽车。

Key-Value商店如何使用该值查询密钥?我读了一些可以使用map-reduce的地方,但是看了几个项目的来源,我找不到一个例子。

如果我问的是正确的问题,请告诉我。

2 个答案:

答案 0 :(得分:9)

基本上,当您使用键值存储时,您正在使用关系数据库内部具有的相同组件构建数据库。这样做的原因是为了在缩放和性能方面拥有更多的控制和灵活性,或者只是为了直截了当。

在这种情况下,您需要将表行和索引的等效项存储为两个单独的东西。因此,如果要对颜色进行索引,则需要存储

{'blue': {123456}}

相当于索引表。

当然,一些键值存储为您提供索引和搜索机制,因此没有适合所有情况的通用规则。

答案 1 :(得分:2)

您可能希望维护一个基本上是索引的单独键/值存储。它将以“蓝色”作为键,然后是“主”汽车商店中所有蓝色的ID列表。

是的,这是复制常规rdbms的索引功能。

这是一篇很好的文章,关于FriendFeed团队如何处理这个问题并确定了这个解决方案及其基本原理(我知道,因为他们使用RDBMS作为键/值存储,所以有点奇怪,但谈话要点是声音理论):
http://bret.appspot.com/entry/how-friendfeed-uses-mysql