2009-10-23 47 views
8

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

比方说,这是我的东西我需要存储:

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

然后,我需要找出所有蓝色的车。

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

让我知道我是否问正确的问题。

回答

8

从本质上讲,当您使用键值存储,你正在建设一个数据库的是一个关系型数据库具有内部相同的组件。这样做的原因是在缩放和性能方面拥有更多的控制权和灵活性,或者仅仅为了简单明了。

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

{'blue': {123456}} 

在等效的索引表。

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

+0

是否需要: {{'color':'blue'}:[123456]} 否则它会如何知道蓝色是指什么。 怎么样的文字? {'Lorem ipsum dolor sit amet,consectetuer adipiscing elit ...':[123456]} 键值存储可以像搜索一样吗? – user142006

+1

我假设索引将只包含颜色作为关键。这些细节取决于您要使用的键值存储。你在回答中提到了两个不同的问题,所以我认为这个问题更多的是一个普通的键值存储问题。 Redis,Hadoop,Tokyo Cabinet,Metakit,Berkeley db,gdbm都为键值存储提供了不同的功能。 –

2

你会想要维护一个单独的键/值存储,实质上是一个索引。它将具有“蓝色”作为关键字,然后是“主”汽车商店中所有蓝色ID的列表。

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

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