4

我想了解,如何使用伏地魔?说,我有这种情况:

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

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

我说得有道理吗?

谢谢

编辑1

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

现在,如果用户从前端搜索 Sex: Male 的所有博客文章,我需要在这里使用 Voldemort

然后,我的代码应该查询 voldemort 并返回所有性别为男性的“博客内容(文本)”。

所以,根据我的理解:

Key = Name, Age and Sex
Value = Text

我正在使用 Java。

4

2 回答 2

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. 开始在其他键值对中存储更多内容,以便您查找。

要实现 #2,您可以像这样添加另一对:

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

然后,当有人搜索 Sex:Male 时,您会提取此值,将其拆分,然后获取所有这些博客文章。

那有意义吗?使用 kv 存储与数据库有很大不同,因为您失去了所有这些关系能力。

于 2010-04-01T19:57:37.663 回答
1

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

例如,您有一个用户到博客文章列表的键值映射。您还可以将年龄映射到用户列表。也是用户列表的性别。现在,如果您想按年龄或性别进行搜索,您可以拉取相应的用户列表,然后拉取他们所有的博客文章。

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

但是,上述方案的问题在于,如果您以分布式方式使用 Voldemort,则最好使用大量映射到短数据列表的键(因此您可以基于键进行分配),例如映射用户的性别会违反(只有几个键,每个键可能有非常大的数据列表)。

于 2010-04-01T20:24:01.023 回答