3

有没有办法从列族或键空间中获取所有数据?

如果不知道对数据库进行的每个条目的每个键,我就想不出一种方法。

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

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

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

4

2 回答 2

4

我一直在寻找的答案是 CQL,cassandra 的查询语言。它的工作原理类似于 sql,这是我之后需要的函数。

这个链接有一些优秀的教程。

于 2012-02-26T16:51:06.173 回答
4

您可以使用 检索列族中的所有数据get_range_slices,将范围开始和结束设置为相同的值以指示您需要所有数据。

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

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

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

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

UserID001 -> 1234567   3456789  
             MsgID0001 MsgID0300

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

然后,您还需要更多的列族来存储用户配置文件等。

也许您需要为您的问题添加更多细节?

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

一种可能性是非规范化,即在一行中为每个用户存储整个消息,因此您不必为每条消息执行单独的查找步骤。然而,这使所需的存储量翻了一番。

于 2012-02-22T21:03:02.537 回答