9

我试图围绕 CouchDB 和 Cassandra 等键值存储。我理解它们为什么有用,但就它们如何替换像 MySql 这样的 RDBMS 而言,我不明白。

假设这是我需要存储的内容:

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

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

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

让我知道我是否问对了问题。

4

2 回答 2

9

本质上,当您使用键值存储时,您正在使用关系数据库内部具有的相同组件构建数据库。这样做的原因是为了对扩展和性能有更多的控制和灵活性,或者只是为了简单。

在这种情况下,您需要将等效的表行和索引存储为两个独立的东西。所以如果你想索引颜色,那么你需要存储

{'blue': {123456}}

相当于一个索引表。

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

于 2009-10-23T13:41:01.957 回答
2

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

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

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

于 2009-10-23T13:14:56.287 回答