【问题标题】:Hector Cassandra Data RetrievalHector Cassandra 数据检索
【发布时间】:2012-03-12 23:25:59
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: cassandra key slice hector


    【解决方案1】:

    您可以使用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
    

    这可用于查找特定用户的消息,可能按时间过滤。

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

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

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

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

    【讨论】:

    • 你是对的,我阅读了它,一种方法是为进入数据库的消息添加索引,然后搜索符合某些条件的消息,例如某些用户发布的消息。但是,如果我使用一个密钥,这是否意味着我只能使用该密钥获取一条消息的数据?
    【解决方案2】:

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

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

    【讨论】:

    • 请注意,CQL 具有与 Thrift 接口相同的功能 - 只是公开方式不同。
    • 问题是我是新手,没有什么经验,CQL 和 Astyanax(NetFlix 库)比 Hector 好得多,主要是因为它们有很好的文档且易于使用,但 hector 确实如此提供最强大的界面。
    猜你喜欢
    • 2012-01-15
    • 2011-11-15
    • 2013-05-23
    • 2012-07-04
    • 2015-06-03
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 2012-04-25
    相关资源
    最近更新 更多