我想了解,Voldermort怎么用?说,我有这种情况:
因为,Voldemort是一对键值对。 我需要根据3个参数获取值(比如一些文字)。
那么,在这种情况下,关键是什么?我不能将3个键用于1个值,但该值应该可以根据这3个参数进行搜索。
我有道理吗?
谢谢
EDIT1
例如:博客系统。用户发布博客:存储用户的数据:姓名,年龄和性别 存储博客内容(文本)。
现在,我需要在这里使用Voldemort,如果用户从前端搜索性别:男性的所有博客帖子
然后,我的代码应查询voldemort并返回所有“Sex as male”的“博客内容(文本)”。
所以,按照我的理解:
Key = Name, Age and Sex
Value = Text
我正在使用Java。
答案 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发布的所有博客帖子,但是无法直接获取该数据。此时,您必须:
要实现#2,您可以添加另一对,如下所示:
Key = search-Sex:Male
Value = Chad1 Chad2 Steve1 ...
然后,当有人搜索“性别:男性”时,你会拿出这个值,将其拆分,然后去获取所有这些博客文章。
这有意义吗?使用k-v存储与数据库有很大的不同,因为你失去了所有这些关系能力。
答案 1 :(得分:1)
我认为您不能直接使用键值存储来实现这一点,但解决方法之一就是将用户存储在多个位置。
例如,您将用户的键值映射到博客帖子列表。您还可以将年龄映射到用户列表。也是用户列表中的性别。现在,如果您想按年龄或性别进行搜索,请提取相应的用户列表,然后提取所有博客帖子。
像Voldemort这样的键值存储可以工作的部分原因是存储和查询足够便宜,你可以做额外的。
然而,上述方案存在的问题是,如果您以分布式方式使用Voldemort,那么最好使用大量键映射到短数据列表(因此可以根据键分发)将性别映射到用户的行为会违反(只有几个键,每个键可能包含非常大的数据列表)。