19

私は Cassandra とカラム ファミリー (CF)を構築する方法を理解しようとしていますが、リレーショナル データベースに慣れているため、非常に困難です。

たとえば、単純なusersCF を作成し、新しい行を挿入しようとすると、MySQL のように増分キーを作成するにはどうすればよいですか?

一意の ID の代わりにユーザー名を入れるだけの例をたくさん見ましたが、それは少し理にかなっていますが、ユーザーに重複したユーザー名を持たせたい場合はどうすればよいでしょうか?

また、私が理解していることから、cassandraが>演算子をサポートしていないため、検索を行うにはどうすればよいですかselect * from users where something > something2

おそらく最も重要な質問は、グループ化についてです。すべてのデータを取得してから、使用している言語でフィルタリングする必要がありますか? それは私のシステムをかなり遅くすると思います。

基本的に、Cassanda を使い始める方法を簡単に説明する必要があります。

4

3 に答える 3

17

あなたの質問は非常に一般的ですが、私はそれを刺してみましょう。まず、クエリの観点からデータをモデル化する必要があります。RDBMS では、正規化された形式でデータをモデル化し、後で特定のクエリ用に最適化します。これは Cassandra ではできません。データを読み取ろうとする方法でデータを書き込む必要があります。多くの場合、これは複数の方法で記述することを意味します。一般に、Cassandra を効果的に使用したい場合は、RDBMS の考え方を完全に捨てることが役立ちます。

キーについて:

  • これらは、Cassandra でリング全体の分散の単位として使用されます。したがって、キーはハッシュされ、リング内の「所有者」が割り当てられます。RandomPartitioner を使用して均等な分散を保証する

  • RandomPartitioner を使用すると仮定すると (使用する必要があります)、キーはソートされません。これは、キーの範囲を要求できないことを意味します。ただし、単一のクエリでキーのリストを要求することはできます。

  • キーが関連するモデルもあれば、関連しないモデルもあります。モデルでキーによるクエリが必要な場合は、アプリケーションが認識する任意の一意の値 (UUID など) を使用できます。キーは、1 日の始まりを表す Unix エポックなどのセンチネル値である場合があります。これにより、Cassandra に一連の既知のキーを渡すことができ、列ごとにソートされたデータの範囲を取得できます (以下を参照)。

クエリ述語について:

  • クエリに答えるために正しくモデル化すると仮定すると、データの範囲を取得できます。

  • 列はソート順に書き込まれるため、スライス クエリを使用して列 A から列 n までの範囲をクエリできます (これは非常に高速です)。複合列を使用して、このメカニズムを少し抽象化することもできます。

  • カーディナリティが低い列でセカンダリ インデックスを使用できます。これにより、値によるクエリ機能が提供されます。

  • データが必要な方法でソートされる独自のインデックスを作成できます。

グループ化について:

集計の作成について言及していると思います。リアルタイムでデータが必要な場合は、何らかの外部メカニズム ( Stormなど) を使用してデータを追跡し、関連する集計を CF に常に更新する必要があります。バッチ プロセスの一部として集計を作成する場合、Cassandra は Hadoop との優れた統合を備えているため、Pig、Hive、または選択した言語で直接 map/reduce ジョブを作成できます。

于 2012-10-03T14:17:28.557 に答える
7

あなたの最初の質問に:

mysql のように増分キーを作成できますか

いいえ、そうではありません。Cassandra のネイティブではありません。 Cassandra で自動インクリメント ID を作成する方法-- 詳細については、こちらをご覧ください: http://srinathsview.blogspot.ch/2012/04/generating-distributed-sequence-number.html

2 番目の質問は、Cassandra データの保存方法とモデル化方法に関するものです。

stackoverflow の検索オプションを確認してください。面白い質問がいっぱい!

  1. MySQL から Cassandra への切り替え - 長所と短所?
  2. Cassandra データ モデル
  3. Cassandra/NoSQL 初心者: モデル化の正しい方法は?
  4. Apache Cassandra スキーマ設計
  5. Apache Cassandra のナレッジ ソース

最も重要なのは、Cassandra を使用しない場合は?

于 2012-10-03T16:13:29.210 に答える
1

PlayOrm をチェックしてみてください。RDBMS の考えから抜け出す必要があることに同意しますが、主キーをユーザー ID として持つことは間違った選択である場合があります。場合によっては、それが正しい選択です (要件によって異なります)。

PlayOrm は noSQL とリレーショナルの概念を組み合わせたもので、両方が必要であり、結合などすべてを使用して Scalable-SQL を実行できます。数十億/数兆の行に成長すると思われるテーブルをパーティション分割するだけで、それらのパーティションにクエリを実行できます。CQL を使用する場合でも、テーブルを分割する必要があります。何によって分割できますか? いくつかのユースケースには時間がかかります。各クライアントは実際には noSQL クラスター内のミニデータベースであるため、他のクライアントはクライアントごとにパーティション分割できます。

キーに関する限り、PlayOrm は、ホスト名-uniqueidinThatHost である一意の「クラスター」キーを生成します。基本的には TimeUUID に似ていますが、a1、a2、a3 などのクラスターでホスト名を使用するため、かなり短くて読みやすい点が異なります。

于 2012-10-03T15:59:32.750 に答える