【问题标题】:Cell versioning with Cassandra使用 Cassandra 进行单元版本控制
【发布时间】:2012-09-05 02:38:20
【问题描述】:

我的应用程序对 DAO 层使用 AbstractFactory,因此一旦实现了 HBase DAO 系列,创建 Cassandra DAO 系列并从多个角度查看差异对我来说非常棒。
无论如何,尝试这样做,我看到 Cassandra 不支持像 HBase 这样的单元版本控制(我的应用程序强烈使用它)所以我想知道是否有一些表格设计技巧(或其他东西)来“模拟”这个Cassandra 中的行为

【问题讨论】:

    标签: nosql cassandra hbase


    【解决方案1】:

    一种常见的策略是使用包含两个组成部分的复合列名:普通列名和版本。您用于版本组件的内容取决于您的访问模式。如果您可能同时有来自多个客户端的更新,那么使用 TimeUUID 是您最安全的选择。如果一次只能更新一个客户端,您可以使用较小的值,例如时间戳或版本号。

    为了简单起见,假设您使用版本号,以下是存储带有版本化字段的文档时的样子:

    | ('body', 5) | ('body', 4) | ... | ('title', 1) | ('title', 0) |
    |-------------|-------------|-----|--------------|--------------|
    | 'Neque ...' | 'Dolor ...' | ... | 'Lorem Ipsum'| 'My Document'|
    

    如果您需要特定版本的字段、字段的所有版本或所有字段的所有版本,此格式主要有用。

    如果您还想支持一次有效地获取所有字段的最新版本,我建议您进行非规范化并添加第二个列族,其中每个字段的最新版本仅以其正常形式存储。您可以为每次更改盲目地覆盖这些字段。继续我们的示例,这个列族看起来像:

    |   'body'    |    'title'    |
    |-------------|---------------|
    | 'Neque ...' | 'Lorem Ipsum' |
    

    【讨论】:

    • 感谢您的明确回复。如果我的访问模式类似于“给我比时间戳 XXXX 更早的单元格”,那该怎么办?我想我需要解析每一列才能找到我需要的东西。这应该不是一个大问题,因为我的行有(大约)50 列,但我想知道在这种情况下是否还有其他更合适的方法
    • 如果要根据时间访问单元格,请使用时间戳(或 TimeUUID)作为列名的第一个组成部分;这将导致它们按时间排序,从而高效地从时间片中获取任何内容。
    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 2013-09-05
    • 2017-08-23
    • 1970-01-01
    相关资源
    最近更新 更多