3

假设我们有包含用户信息的 CF:

{
   123 => { first_name => Nick, last_name => Schiff, age => 23, city = NY }
}

假设我们不按列名搜索,我们使用信息只是为了显示数据。列名也不会经常更新个性。(例如更改名字)

在这种情况下,单个编码的 JSON 可能是更好的主意:

{
   123 => { data = [json], city = NY }
}

并离开“城市”,因为假设我们会经常更新它。

JSON 的优点是:

  1. 简单的非规范化 - 你只复制一列 - 例如“数据”。
  2. 您不需要知道列名,因此在删除之前不需要 slice()。
  3. 模拟没有复合键的超级列 - 这有点像 (1)

我可以看到的缺点:

  1. 不验证 JSON 值
  2. cassandra 不知道存储的值。

有人这样工作吗?我在这里缺少什么吗?

4

1 回答 1

2

根据您的使用模式,这可能是一个合理的策略。以 blob 格式存储数据的最大缺点是如何处理并发更新。假设您有 2 个进程,一个尝试更新该first_name字段,另一个尝试更新该age字段。每个进程都必须读取行以获取当前 blob,然后更新要更改的字段并将其写回 Cassandra。当您的所有数据都存储在一个 blob 中时,第二个写入器将基本上撤消第一个写入器的更改。

如果这些存储为单独的列,则不会发生更新冲突。

但也许您的记录是不可变的,在这种情况下,这个并发更新问题不会成为问题。

于 2012-06-01T15:45:21.723 回答