Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JSON的Apache Cassandra模式设计_Cassandra - Fatal编程技术网

使用JSON的Apache Cassandra模式设计

使用JSON的Apache Cassandra模式设计,cassandra,Cassandra,假设我们有CF和用户信息: { 123 => { first_name => Nick, last_name => Schiff, age => 23, city = NY } } 假设我们不按列名搜索,我们只使用信息来显示数据。 列名也不经常更新。(例如更改名字) 在这种情况下,单个编码的JSON可能更好: { 123 => { data = [json], city = NY } } 离开“城市”,因为我们会经常更新它 JSON的优点是: 简单的

假设我们有CF和用户信息:

{
   123 => { first_name => Nick, last_name => Schiff, age => 23, city = NY }
}
假设我们不按列名搜索,我们只使用信息来显示数据。 列名也不经常更新。(例如更改名字)

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

{
   123 => { data = [json], city = NY }
}
离开“城市”,因为我们会经常更新它

JSON的优点是:

  • 简单的反规范化-只复制一列-例如“数据”
  • 您不需要知道列名,因此在删除之前不需要切片()
  • 模拟没有复合键的超级列-这有点像(1)
  • 我看到的缺点是:

  • 不验证JSON值
  • 卡桑德拉不知道存储的值

  • 有人是这样工作的吗?这里有我遗漏的东西吗?

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

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


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

    是的,没错,我没有提到它,但是JSON(blob)数据没有改变,至少没有单独改变。你要么改变一切,要么什么都不改变(没有人只需要改变名字)。