Pio*_*pla 20 database-versioning cassandra
您能否分享一下您如何在Cassandra中实现数据版本控制的想法?
假设我需要在简单的地址簿中对记录进行版本控制.(地址簿记录存储为ColumnFamily中的行).我期待历史:
我正在考虑以下方法:
将地址簿转换为超级列族并将多个版本的地址簿记录存储在一行(按时间戳)键为超级列.
创建新的超级列族以存储旧记录或更改记录.这种结构如下:
{'地址簿行键':{'时间戳1':{'名字':'新名称','由'修改':'用户ID',},
'time stamp2': {
'first name': 'new name',
'modified by': 'user id',
},
},
Run Code Online (Sandbox Code Playgroud)
'另一个地址簿行键':{'时间戳':{....
将版本存储为新ColumnFamilly中附加的序列化(JSON)对象.将版本集表示为行,将版本表示为列.(使用CouchDB进行简单文档版本控制后建模)
如果您可以添加地址簿通常少于10,000个条目的假设,那么在超级列族中每个地址簿时间线使用一行将是一个不错的方法.
一行看起来像:
{'address_book_18f3a8':
{1290635938721704: {'entry1': 'entry1_stuff', 'entry2': 'entry2_stuff'}},
{1290636018401680: {'entry1': 'entry1_stuff_v2', ...},
...
}
Run Code Online (Sandbox Code Playgroud)
其中行键标识地址簿,每个超级列名称是时间戳,子列表示该版本的地址簿内容.
这将允许您使用只有一个查询阅读最新版本的地址簿中,并与单个插入写一个新的版本.
如果地址簿少于10,000个元素,我建议使用它的原因是,当您读取单个子列时,必须完全反序列化超级列.总的来说,在这种情况下并没有那么糟糕,但要记住这一点.
另一种方法是每个版本的地址簿使用一行,并使用单独的CF和每个地址簿的时间行,如:
{'address_book_18f3a8': {1290635938721704: some_uuid1, 1290636018401680: some_uuid2...}}
Run Code Online (Sandbox Code Playgroud)
这里,some_uuid1和some_uuid2对应于那些版本的地址簿的行键.这种方法的缺点是每次读取地址簿时都需要两个查询.好处是它可以让您有效地只读取地址簿的选定部分.
| 归档时间: |
|
| 查看次数: |
10086 次 |
| 最近记录: |