【问题标题】:Cassandra schema for comments用于评论的 Cassandra 架构
【发布时间】:2012-07-12 23:47:50
【问题描述】:

我正在寻找一种将 cmets 存储在 cassandra 中的好方法。 谁能给我一个好的 Cassandra 数据模型来存储 cmets?

数据模型应该允许我使用phpcassa 检索一定数量的这些 cmets。

这是我的想法:

Comments = {
    CommentId1:{
        CommentAuthor,
        Content,
        Timestamp
    },
    CommentId2:{
        CommentAuthor,
        Content,
        Timestamp
    }
    ...
}

CommentsLine = {
    EntryId1:{
        CommentId1: timestamp,
        CommentId2: timestamp,
        CommentId3: timestamp,
        ...
    }
    ...
}

但我不确定这是更好的方法。感谢您的帮助。

【问题讨论】:

    标签: cassandra phpcassa


    【解决方案1】:

    您的解决方案似乎很酷,但最好将带有时间戳的密钥存储在 CF CommentsLine 中,这样您就可以订购您的 cmets。

    CommentsLine = {
        EntryId1:{
            timestamp: CommentId1 ,
            timestamp: CommentId2 ,
            timestamp: CommentId3 ,
            ...
        }
        ...
    }
    

    【讨论】:

    • 在我的解决方案中,如果您想要排序的 cmets 您可以通过存储 {Posted Timestamp} -> {{Comment author user ID} 和其他元数据作为 JSON} 的列的简单切片从帖子表中获取它
    • 或许是的。我不知道您的架构,但在此示例中,最好使用 rowkey 中的列来保持对 cme​​ts 的排序。
    • @sahid 好的,但是我如何只获得前 5 个结果,然后再获得另外 5 个结果 ecc...?
    • API 提供了一种解决方案,可以为特定行键添加要检索的列数限制,但是 API 不支持列偏移量是对的。
    • @sahid 谢谢你,还有一点好奇。我应该通过 CQL 使用execute_cql_query() 还是通过get()insert() 函数等...?
    【解决方案2】:

    我曾经解决过这个问题。这是我如何解决这个问题的。一个单独的 ColumnFamily cmets,其中每一行都是一个评论的 ID(我的 ID 的形式是 {Parent Post ID}-{Comment author user ID}-{Comment Posted Timestamp}),然后在其中有一个包含 Author、comment、posted 的列日期等。

    您可以有自己的格式,并将它们分开到一个单独的列族中,以确保它们是分布式的。

    一旦完成链接,您必须将每个评论链接到其父级,您可以通过保留列名 cmets 来做到这一点,该列名可以具有 {Posted Timestamp} -> {{Comment author user ID} 和其他元数据作为 JSON}(这完全针对我的场景,你应该想你喜欢的东西)。

    当您可以生成的某人 cmet 从 PHP 发布微时间并相应地插入到 cassandra 中时。这种格式确保 Cassandra 以环的形式分发 cmets,并且 post 中的行保持最少,仅包含所需的信息。

    加载 cmets 需要您选择列,然后对 Comments 列族执行 MultiGet 调用。

    【讨论】:

      猜你喜欢
      • 2019-08-07
      • 1970-01-01
      • 2018-09-25
      • 2010-09-17
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      相关资源
      最近更新 更多