首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Cassandra中实现数据版本控制的方法

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

Stack Overflow用户
提问于 2010-11-15 19:37:51
回答 2查看 11K关注 0票数 21

您能分享一下您的想法吗?您将如何在Cassandra中实现数据版本控制?

假设我需要在一个简单的地址簿中对记录进行版本控制。(地址簿记录存储为ColumnFamily中的行)。我期望历史:

  • 将被同时使用以一种“时光机”的方式呈现它
  • 一个版本不会超过几百个不会过期。

我正在考虑以下方法:

  • 将地址簿转换为超级列系列,并在一行中存储多个版本的地址簿记录(通过时间戳)作为超级columns.
  • Create新的超级列系列,以存储旧记录或对记录的更改。这种结构将如下所示:

{‘通讯录行键’:{‘时间戳1’:{‘名字’:‘新名字’,‘修改人’:‘用户id',},

‘时间戳2’:{‘名字’:‘新名字’,‘修改人’:‘用户id',},},

‘另一个地址簿行键’:{‘时间戳’:{....

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-25 06:09:24

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

行将如下所示:

代码语言:javascript
复制
{'address_book_18f3a8':
  {1290635938721704: {'entry1': 'entry1_stuff', 'entry2': 'entry2_stuff'}},
  {1290636018401680: {'entry1': 'entry1_stuff_v2', ...},
  ...
}

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

这将允许您只使用一个查询来读取地址簿的最新版本,并且还可以使用一次插入来编写新版本。

我建议在地址簿少于10,000个元素的情况下使用此方法的原因是,即使只读取一个子列,也必须完全反序列化超列。总体而言,在这种情况下并不是那么糟糕,但要记住这一点。

另一种方法是对地址簿的每个版本使用单行,并使用单独的CF,每个地址簿使用时间线行,如下所示:

代码语言:javascript
复制
{'address_book_18f3a8': {1290635938721704: some_uuid1, 1290636018401680: some_uuid2...}}

这里,some_uuid1和some_uuid2对应于这些版本的地址簿的行键。这种方法的缺点是,每次读取地址簿时都需要两次查询。优点是,它允许您有效地只读地址簿的选定部分。

票数 9
EN

Stack Overflow用户

发布于 2013-03-18 20:59:22

HBase(http://hbase.apache.org/)内置了此功能。试试看。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4183945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档