使用JSON的Apache Cassandra架构设计

时间:2012-06-01 08:12:52

标签: cassandra

假设我们有CF用户信息:

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

假设我们也不按列名搜索,我们只使用这些信息来显示数据。 列名也不经常更新个性。 (例如,更改first_name)

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

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

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

JSON的优点是:

  1. 容易非规范化 - 您只复制一列 - 例如“数据”。
  2. 您不需要知道列名,因此在删除之前不需要切片()。
  3. 模拟没有复合键的超级列 - 这有点像(1)
  4. 我可以看到的缺点:

    1. 没有验证JSON值
    2. cassandra不知道存储的值。
    3. 有人这样做吗?我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:2)

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

如果将它们存储为单独的列,则不存在更新冲突。

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