正确使用Voldemort作为键值对?

时间:2010-04-01 19:54:19

标签: voldemort

我想了解,Voldermort怎么用?说,我有这种情况:

因为,Voldemort是一对键值对。 我需要根据3个参数获取值(比如一些文字)。

那么,在这种情况下,关键是什么?我不能将3个键用于1个值,但该值应该可以根据这3个参数进行搜索。

我有道理吗?

谢谢

EDIT1

例如:博客系统。用户发布博客:存储用户的数据:姓名,年龄和性别 存储博客内容(文本)。

现在,我需要在这里使用Voldemort,如果用户从前端搜索性别:男性的所有博客帖子

然后,我的代码应查询voldemort并返回所有“Sex as male”的“博客内容(文本)”。

所以,按照我的理解:

Key = Name, Age and Sex
Value = Text

我正在使用Java。

2 个答案:

答案 0 :(得分:5)

编辑的答案适合添加到问题的示例:

要了解Voldemort的事情是它是一个非常简单的键值存储。据我所知,你可以做的只有 的事情是在一个键下存储一个值,然后按键获取这些值。所以对于你的例子,如果你真的想使用Voldemort,你有几个选择。

因此,例如,您已经说过要为用户存储数据。所以,你可能会有这样的事情:

Key = user-Chad
Value = Name:Chad Birch, Age:26, Sex:Male

现在,如果我想发布新的博文,您还需要将其存储在密钥下。所以你可以这样做:

Key = blog-Chad1
Value = Here is my very first blog post.

现在,您的问题是您需要一些方法来查找用户使用Sex:Male发布的所有博客帖子,但是无法直接获取该数据。此时,您必须:

  1. 拉出每个用户,检查他们是否是男性,如果是男性,请拔出他们的博文。
  2. 开始在其他键值对中存储更多内容,以便您可以查看。
  3. 要实现#2,您可以添加另一对,如下所示:

    Key = search-Sex:Male
    Value = Chad1 Chad2 Steve1 ...
    

    然后,当有人搜索“性别:男性”时,你会拿出这个值,将其拆分,然后去获取所有这些博客文章。

    这有意义吗?使用k-v存储与数据库有很大的不同,因为你失去了所有这些关系能力。

答案 1 :(得分:1)

我认为您不能直接使用键值存储来实现这一点,但解决方法之一就是将用户存储在多个位置。

例如,您将用户的键值映射到博客帖子列表。您还可以将年龄映射到用户列表。也是用户列表中的性别。现在,如果您想按年龄或性别进行搜索,请提取相应的用户列表,然后提取所有博客帖子。

像Voldemort这样的键值存储可以工作的部分原因是存储和查询足够便宜,你可以做额外的。

然而,上述方案存在的问题是,如果您以分布式方式使用Voldemort,那么最好使用大量键映射到短数据列表(因此可以根据键分发)将性别映射到用户的行为会违反(只有几个键,每个键可能包含非常大的数据列表)。