Hector Cassandra数据检索

时间:2012-02-22 15:48:19

标签: cassandra key slice hector

有没有办法从列系列或密钥空间获取所有数据?

如果不知道对数据库进行的每一个条目的每一个密钥,我都无法想到这样做的方法。

我的问题是我正在尝试创建一个Twitter克隆,其中每条消息都有自己的id,并将它们存储在同一列系列中的相同键空间中。

但是我该如何让他们回来?我将不得不跟踪每一个id,这是不可能的。

任何帮助/想法都将不胜感激。

2 个答案:

答案 0 :(得分:4)

您可以使用get_range_slices从列系列中检索所有数据,将范围start和end设置为相同的值,以指示您想要所有数据。

还没有找到一个方便的Hector示例,但我认为它使用RangeSlicesQuery ...

但是,目前尚不清楚为什么要这样做 - 对于这种应用程序,您通常会按ID查找消息,并使用索引来确定所需的ID。例如,为列出所有消息的每个用户存储一行。例如,在消息列族中,您可能具有以下内容:

MsgID0001 -> time     text
             1234567  Hello world
MsgID0300 -> time     text
             3456789  LOL ROTFL 

然后在“user2msg”列系列中,存储消息,可能使用时间戳列名称,以便按时间顺序存储消息:

UserID001 -> 1234567   3456789  
             MsgID0001 MsgID0300

然后可以使用它来查找特定用户的消息,可能按时间过滤。

您还需要更多列系列来存储用户配置文件等。

也许您需要在问题中添加更多细节?

更新以回应评论:是的,如果每行有一条消息,则必须单独检索每条消息。但你有什么选择呢?检索所有消息仅对消息的批处理有用,而不是(例如)向用户显示其最近的消息。请记住,检索所有消息可能需要非常很长时间 - 您还没有解释为什么要检索所有消息以及您将要对它们执行的操作。你期望有多少条消息?

一种可能性是非规范化,即每个用户连续存储整个消息,因此您不必为每个消息执行单独的查找步骤。但是,这会使所需的存储量增加一倍。

答案 1 :(得分:4)

我正在寻找的答案是CQL,cassandra的查询语言。它的工作方式类似于sql,这是我之后所需的函数。

这个link有一些很棒的教程。