2017-06-23 25 views
0

全く同じ構造の1000個のエンティティがあるとします。同じ構造のテーブルが多いか、多くの行があるテーブルが1つ多いのですか?

String id; 
String name; 
int amount; 

はまた、私は、システム内のエンティティのすべての種類の膨大な量があることを期待しています。たとえば、すべてのエンティティは、次の3つのフィールドを持っています。

だから私は今、二つの変種があります。各エンティティの

  1. は次のようになり、別のテーブルを作成:

    CREATE TABLE <SOME_ENTITY_NAME> (
        id text PRIMARY KEY, 
        name text, 
        amount int 
    ) 
    
  2. を、私は1つのテーブルのみを作成しますが、複合priamryキーでます:

    CREATE TABLE ALL_ENTITIES_TABLE (
        entity_name text, 
        id text, 
        name text, 
        amount int, 
        PRIMARY KEY ((entity_name, id)) 
    ); 
    

もちろん、1つのテーブルだけをサポートするほうが簡単ですが、パフォーマンスはどうですか?

したがって、エンティティの種類ごとに数百万(数十億もの)のレコードがあることを考慮して、パフォーマンスの点でどのような変種が優れているのでしょうか?

+1

あなたのアクセスパターンは...とにかく第2のアプローチははるかに優れています.... 'WHERE entity_name = ''とid = '''は効率的に2番目のテーブルで処理されます...異なるユースケース...ユースケースを共有する –

答えて

0

私の意見では、最初のアプローチは保守性の点では間違っています。動的に作成されるテーブルが多すぎると、維持するのが難しいはずです。また、(データ検索の必要性に応じて)パーティション化/クラスタリングの順序を適切に使用すると、クエリをより簡単かつ効率的に行う必要があります。また、3.xバージョンのCassandraを使用している場合は、セカンダリインデックスが便利です。

注:セカンダリインデックスでは並べ替えができません。

0

カッサンドラは、ディスクスペースが中でも最も安価なリソースであるという事実を考慮して設計されました。最も効果的な方法でクエリの目的に役立つ限り、このモデルがより多くのディスク領域を消費するかどうかにかかわらず、最も多く使用するクエリを中心にデータモデルを構築する必要があります。私は、あなたが使用するクエリを見ないと、あなたの質問に答えることができません。一般に、クエリの目的を果たす限り、必要な数のテーブルを自由に作成する必要があります。私は見ていることをお勧めしますhere

関連する問題