2016-04-06 9 views
1

次の問題のためにcassandraテーブルを定義しようとしています。
私は以下の関係を持っています:
ユーザ(user_id)は多くの追加(add_id)を見ることができます。
add(add_id)は、1人以上のユーザーが見ることができます。
パフォーマンスを念頭に置いてCassandra 3.0で多対多の関係をモデル化する方法

そして、私はカサンドラに以下のquerysを作りたい:

  1. は、ユーザー(USER_ID)を考えると、私に与えて、すべてのユーザーが追加(add_id)を考えると
  2. を見たと付け加え(add_id)を得私が撮ったaproachは関係

    CREATE TABLE adds_by_user (
        user_id text, 
        add_id text, 
        PRIMARY KEY (user_id, add_id) 
    ); 
    
    CREATE TABLE user_by_add (
        add_id text, 
        user_id text, 
        PRIMARY KEY (add_id, user_id) 
    ); 
    
    whith 2つのテーブルを作成することでした私のすべてのユーザー(のuser_id)

を追加したことを見ました

マイアルゴリズムのuser_idを考えると、次の
行います

  1. は私に、ユーザーが見ていることをすべてadd_idを与えます。それぞれの
  2. は私に、各ユーザーが別のグラフィカル

を見て、すべてのadd_idを与え、私にadd_idそれぞれの

  • をUSER_IDことを見て、すべてののuser_idを与え、をadd_idそれを見る方法は:

    (1)user_id - >(多数)add_id - >(多数+)user_id - >(多くの++)add_i d

    多くの関係があり、アルゴリズムがすべてのクエリを実行するのに多くの時間を費やすと問題が発生します(各クエリが0.5ミリ秒以下で実行されるにもかかわらず、)それらを私はすでに非同期を使用しています

    は、私は、クエリを高速化することができますモデルがあり

    を照会?

    アルゴリズムがクエリを少なくし、カッサンドラ標準を尊重するモデルがありますか?

    ありがとうございます!データモデルの

  • +0

    として見ることができます。これを解決する良い方法があります。 –

    +0

    こんにちは@AbhishekAndlandあなたの反応を疑ってはいけません。あなたはこれをCasandraで解決する良い方法があると言っていますか、このモデルにはneoj4を使わなければならないと言っていますか? –

    答えて

    1

    例:

    CREATE TABLE user_address_user(
        user_id text, 
        address_id text, 
        user_level2 text, 
        address_level2 text, 
        PRIMARY KEY((user_id), address_id, user_level2, address_level2) 
    ); 
    

    このテーブルの構造は、あなたがカサンドラに、のNeo4jのようなノード/グラフデータベース構造に合うようにしようとしているように見えます

    Map<user_id, SortedMap<address_id, SortedMap<user_level2, SortedSet<address_level2>>>>

    +0

    こんにちは@doanduyhai、私はあなたが提案した解決策は、関係を書いてあまりにも多くの時間を費やす場合ですが、私が持っている問題は**書き込み時間**ではない、問題は**読み取り時間**です。 –

    +0

    上記の私の更新答えを見てください – doanduyhai

    関連する問題