【问题标题】:Correct usage of Voldemort as key-value pair?正确使用伏地魔作为键值对?
【发布时间】:2010-04-01 19:54:19
【问题描述】:

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

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

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

我说得有道理吗?

谢谢

EDIT1

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

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

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

所以,根据我的理解:

Key = Name, Age and Sex
Value = Text

我正在使用 Java。

【问题讨论】:

    标签: voldemort


    【解决方案1】:

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

    要了解 Voldemort 是一个非常简单的键值对存储。据我所知,only 你能做的就是在一个键下存储一个值,然后通过键获取这些值。因此,对于您的示例案例,如果您真的想使用 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 时,您提取此值,将其拆分,然后获取所有这些博客文章。

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

    【讨论】:

    • 您建议的答案是使用Voldemort(键值对)的解决方法或正确方法
    • 这是一个很棒的解决方案,所以告诉我,如果我使用你建议的方法,我实际上是在扭曲 Voldemort 的实际目的并且不必要地使用它,或者这是正确的吗?
    • 好吧,你不能真正“扭曲”它的目的。 Voldemort 所做的只是获取值并将它们存储在键下。它不关心他们是什么。您需要弄清楚的是,在存储更多 k-v 对以加快查找速度(这使得每当有人发布内容时您必须进行大量更改)或存储更少但需要重复查找以获取信息之间取得平衡你想要的。
    • 例如,在我给出的示例中,每次男性用户发表新的博客文章时,您都必须拔出 search-Sex:Male 键并更改其值以包含新的邮政。但是,如果您只存储男性用户列表,则不必这样做。但是,当有人搜索男性的帖子时,您必须进行额外的查找。首先,您必须获取所有男性用户的列表,然后您必须获取他们所有帖子的列表,而不是直接查看结果。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多