2016-12-21 16 views
-2

私が受け取るprotobufメッセージ 'sessionproto'には再帰的なフィールドがあります。再帰的構造のためのカサンドラのデータモデル

itemrelationprotoはitemgroupprotoを参照し、itemgroupprotoはitemrelationprotoを参照します。

このデータを格納するためにCassandraにデータモデルを定義するにはどうすればよいですか?

ありがとうございました。

message itemrelationproto { 
    optional string id = 1; 
    optional itemgroupproto itemgroup = 2; 
} 

message itemgroupproto { 
    optional string id = 1; 
    optional string displayname = 2; 
    repeated itemrelationproto itemrelations = 3; 
} 

message sessionproto { 
    optional string sessionid = 1; 
    optional string displayname = 3; 
    repeated itemrelationproto itemrelations = 4; 
} 

create type itemrelationproto (
id text, 
itemgroup frozen<itemgroupproto> 
); 

create type itemgroupproto (
id text, 
displayname text, 
itemrelations set<frozen<itemrelationproto>> 
); 

create table sessionproto (
sessionid text, 
displayname text, 
itemrelations set<frozen<itemrelationproto>, 
primary key (sessionid) 
); 
+0

protobufメッセージをバイト配列に変換し、それらをbandleとしてcassandraに格納することができます。 –

答えて

1

カッサンドラはお互いを参照するアイテムを保存できないため、リレーショナルデータベースではありません。したがって、カッサンドラで再帰を行う方法はありません。

あなたがしようとしているのは、現在可能ではない再帰的に型を定​​義することです。私が提案する解決策は、プロトタイプをバイト配列またはjsonなどに変換してtextまたはblobフィールドに格納することです。もう1つの解決策は、複数のテーブルを作成して各メッセージを個別に保存することですが、sessionproto全体を選択するいくつかの要求が必要になります。

+0

ありがとうDineMartine。私はあなたの応答に感謝します..これは私が念頭に置いたことですが、すべての可能性を模索し、正しい方向に向かうことを確認したい。 – shylas

2

Cassandraでのデータモデリングは、保存したいオブジェクトに関するものではなく、データに対して実行するクエリに関するものです。

以下のリンクが役に立つかもしれません:

上記のブログ記事からこの文は非常によく、それを合計:

はしないでください関係をモデル化する。オブジェクトの周りにモデル化しないでください。あなたのクエリをモデル化します。

したがって、適切なデータモデルを実行するクエリを知らなくても、示唆することはできません。

関連する問題