2017-01-08 13 views
1

NoSqlベースのcouchbaseまたはcassandraを使用してプロジェクトを開発する必要があります。 各顧客のデータをバケットに分割することをお勧めしますか?nosqlクライアント別データ

私のケースでは、異なるクライアント間で要求はありません。 データを完全に分離することができます。

couchbaseでは、各バケットごとにメモリ容量が予約されていました。

ここで、分離は別の場所の文書またはcassandraのスーパー列で行われなければなりません。分離はカサンドラのために別の場所のドキュメントやスーパーの列で行われなければならない場合は

はあなたに

答えて

1

ありがとうございます。

ヒント#1カサンドラで作業する場合、は完全にあなたの語彙から単語「スーパー欄を」消去。

各顧客のデータをバケットに分割することをお勧めしますか?

あなたのクエリは主に顧客IDに基づいているように聞こえるので、パーティションキーの部分とすることが理にかなっています。しかし、各顧客パーティションに数百万の行および/または列がある場合、それは非常に大きくなるでしょう。

ヒント#2、適切なカサンドラモデリングは、必要なクエリの外観に基づいて行われます。だから実際にあなたが提供する必要がある種類のクエリを見ることなく、それ以上の具体的なことは困難になるだろう。

アカウントや住所などに関する顧客データがある場合は、プライマリキーがcustomer_idcustomersテーブルを作成することは意味があります。しかし、たとえばemail_addressで顧客にクエリを行う必要がある場合は、customers_by_emailテーブルを作成し、そのテーブルにデータを複製し、それをサポートするPRIMARY KEYを作成します。

さらに、お客様の活動にデータを格納する場合は、customer_activityテーブルのPRIMARY KEYがPRIMARY KEY ((customer_id,month),activity_time)であると考えてください。これはcustomer_idmonthの両方をパーティションキーとして使用し、activity_timeでクラスタ化された顧客のアクティビティを格納します。この場合、追加のパーティションキーとしてmonthを使用しなかった場合、それぞれのcustomer_idパーティションは、あまりにも書き込みやクエリ(バインドされていない行の増加)が不適切なものになるまで、継続的に書き込まれます。

概要

  • 誰でもカサンドラでスーパー列を使用するよう表示されたら、それらを平手打ち。
  • の前にのテーブルを設計する前に、クエリを知る必要があります。
  • はい、customer_idは、データを個別に保ち、各クエリが1つのノードに限定されていることを確認するのに適しています。 - バインドされていない行の増加を考慮してパーティションキーを作成し、同じパーティションにあまりにも多くのデータを書き込まないようにします。
+0

ご迷惑をおかけして申し訳ありません。 対象のアプリケーションは、オンライン会計アプリケーションの近くにありますが、ほとんどの場合、クライアントの相談に限ります。 データは自動プロセスによって追加されます。 私はcassandraを使用したことがなく、mongoDbをnosqlで使用しています。 (これを列ファミリではなくスーパーカラムでグループ化する) – user4185975