gpt4 book ai didi

cassandra - 在Cassandra中实现数据版本控制的方法

转载 作者:行者123 更新时间:2023-12-03 12:18:16 25 4
gpt4 key购买 nike

您能否分享您的想法,如何在Cassandra中实现数据版本控制。

假设我需要在一个简单的通讯簿中对记录进行版本控制。 (通讯簿记录存储为ColumnFamily中的“行”)。
我希望这段历史:

  • 将很少使用
  • 将一次全部使用,以一种“时间机器”的方式呈现它
  • 单个记录的版本不会超过数百个。
  • 历史记录不会过期。

  • 我正在考虑以下方法:
  • 将地址簿转换为“ super 列族”,并将多个版本的地址簿记录存储在作为 super 列键入(按时间戳记)的行中。
  • 创建新的 super 列族以存储旧记录或对记录的更改。
    这种结构如下所示:

    {
    “通讯录行键”:{
    “时间戳1”:{
    '名字':'新名字',
    '修改人':'用户ID',
    },
    'time stamp2': {
    'first name': 'new name',
    'modified by': 'user id',
    },
    },

    “另一个通讯录行键”:{
    “时间戳”:{
    ....
  • 将版本存储为附加在新ColumnFamilly中的序列化(JSON)对象。将版本集表示为行,将版本集表示为列。 (模仿Simple Document Versioning with CouchDB)
  • 最佳答案

    如果您可以添加一个假设,即地址簿中通常少于10,000个条目,那么在超列族中每个地址簿时间线使用一行将是一种不错的方法。

    一行看起来像:

    {'address_book_18f3a8':
    {1290635938721704: {'entry1': 'entry1_stuff', 'entry2': 'entry2_stuff'}},
    {1290636018401680: {'entry1': 'entry1_stuff_v2', ...},
    ...
    }

    其中行键标识地址簿,每个 super 列名称都是一个时间戳,子列表示该版本的地址簿内容。

    这样一来,您只需一个查询即可读取地址簿的最新版本,并且只需插入一次即可编写新版本。

    如果地址簿少于10,000个元素,我建议使用此命令的原因是,即使阅读单个子列, super 列也必须完全反序列化。总体而言,在这种情况下还不错,但是要记住一点。

    一种替代方法是在每个版本的通讯录中使用一行,并在每个通讯录中使用带有时间线行的单独CF,例如:
    {'address_book_18f3a8': {1290635938721704: some_uuid1, 1290636018401680: some_uuid2...}}

    在这里,some_uuid1和some_uuid2对应于那些版本的通讯簿的行键。这种方法的缺点是每次读取地址簿时都需要两个查询。好处是它使您可以有效地仅读取地址簿的选定部分。

    关于cassandra - 在Cassandra中实现数据版本控制的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4183945/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com