1

次のようにネストされたデータがあります-

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) のような複合列は、さらにネストされた構造に遭遇すると壊れます。

助言がありますか........

4

2 に答える 2

1

マップ/ディクテーションを列タイプとして使用することを検討しましたか? この投稿では、Cassandra で使用できるさまざまなコレクション タイプについて説明します

于 2013-08-18T08:39:54.193 に答える
0

つまり、グラフ データベースのように見えます。Cassandra の上にグラフ データベースを実装する titan db http://thinkaurelius.github.io/titan/を使用する必要があります。

自分で再発明したい場合は、何かを挿入したいときはいつでも、異なるキープレフィックスを使用して複数回挿入できます。だから挿入する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->qq->rrあなたの下にあるすべての値を取得するには、次のようにします。

select * from XYZ where prefix = 'p:qq:rrr';
于 2013-08-10T16:46:45.593 に答える