【问题标题】:columnfamily setup for nested structure cassandra嵌套结构 cassandra 的 columnfamily 设置
【发布时间】:2013-08-18 16:39:54
【问题描述】:

我有嵌套的数据 -

a -> bb (multiple columns name values for bb)
a -> bb -> ccc (multiple columnn name values for ccc)
a -> bb -> ddd (multiple columnn name values for ddd)
a -> cc -> eee (multiple columns name values for eee)
p -> qq
p -> qq -> rrr 
p -> qq -> rrr -> ssss -> ttttt......
....

对于输入“a”,我需要获取“a”下的所有内容。 对于输入 'bb' 下的所有东西 'bb' 等等。

没有明确的嵌套限制,在 cassandra 中建模的最佳方法是什么。 使用复合列,我需要提前知道有多少嵌套级别,所以我不确定那会很好。 即,如果我遇到更多嵌套结构,像 (a:bb:ccc) 这样的复合列将会中断。

任何建议............

【问题讨论】:

    标签: model cassandra


    【解决方案1】:

    您是否考虑过使用地图/字典作为列类型?这个post 解释了 Cassandra 中可用的不同集合类型

    【讨论】:

      【解决方案2】:

      所以它看起来像一个图形数据库。您可能应该使用 titan db http://thinkaurelius.github.io/titan/,它在 Cassandra 之上实现了一个图形数据库。

      如果你想自己重新发明它,任何时候你想插入一些东西,你可以用不同的键前缀多次插入它。所以要插入p -> qq -> rrr -> ssss -> ttttt

      插入:

      p : qq -> rrr -> ssss -> ttttt
      p -> qq : rrr -> ssss -> ttttt
      p -> qq -> rrr : ssss -> ttttt
      p -> qq -> rrr -> ssss : ttttt
      p -> qq -> rrr -> ssss -> ttttt : <empty>
      

      理论上,您可以使用代码中的“DynamicComposite”类型来获得可变长度的元组,但这会使从命令行工具或除您的代码之外的任何东西中使用数据库变得更加困难。最好只使用带分隔符的字符串。还可以使用批处理,以便所有写入都失败或成功。

      begin batch
      insert into XYZ (prefix, suffix) values ('p', 'qq:rrr:ssss:ttttt');
      insert into XYZ (prefix, suffix) values ('p:qq', 'rrr:ssss:ttttt');
      insert into XYZ (prefix, suffix) values ('p:qq:rrr', 'ssss:ttttt');
      insert into XYZ (prefix, suffix) values ('p:qq:rrr:ssss', 'ttttt');
      insert into XYZ (prefix) values ('p:qq:rrr:sass:ttttt');
      apply batch;
      

      然后要获取p-&gt;qq-&gt;rr 下的所有值,您只需:

      select * from XYZ where prefix = 'p:qq:rrr';
      

      【讨论】:

      • 谢谢赞森。我决定为每个级别添加参考 ID,例如 - RowKey : Columns p : id1 | id2 | id3... p.qq : id1 | id3 p.qq.rrr : id3
      • 重复我之前尝试发布的内容 - 我决定为每个级别添加参考 ID,例如 - RowKey : Columns p : id1 | id2 | id3... p.qq : id1 | id3 p.qq.rrr : id3 并在一行中包含每个 id 的详细信息,例如 - details | id1 -| id2 -| id3 -... 这使得详细信息行变大,因为所有 id 详细信息都将在一行中。但我将始终仅按列名查询列。您是否发现此设计有任何问题...获取所有 id 详细信息的每个请求都将在两个查询中完成 - 查询 Id,然后是所有 Id 的详细信息
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      相关资源
      最近更新 更多