Cassandra 単純なデータベースの例を含むデータ モデル
しかし Cassandra クエリ言語は次のように似ています SQL 言語、データモデリング方法がまったく異なります。
In Cassandra悪いデータモデルはパフォーマンスを低下させる可能性があり、特にユーザーがRDBMSの概念を実装しようとすると、 Cassandra。以下に詳しく説明するいくつかのルールに留意することをお勧めします。
Cassandra データモデルのルール
In Cassandra、書き込みは高価ではありません。 Cassandra 結合、グループ化、OR 句、集計などはサポートされていません。そのため、データを完全に取得できる方法でデータを保存する必要があります。したがって、データをモデル化する際には、これらのルールに留意する必要があります。 Cassandra.
書き込み回数を最大化する
In Cassandra、書き込みは非常に安価です。 Cassandra 高い書き込みパフォーマンスを実現するために最適化されています。したがって、読み取りパフォーマンスとデータ可用性を向上させるために、書き込みを最大化するようにしてください。データの書き込みとデータの読み取りの間にはトレードオフがあります。したがって、データ書き込み数を最大化することで、データ読み取りパフォーマンスを最適化します。
データの重複を最大化する
データの非正規化とデータの重複は事実上、 Cassandraディスク容量は、メモリ、CPU処理、IO操作よりも高価ではありません。 Cassandra は分散データベースであるため、データの複製により即時にデータを利用できるようになり、単一障害点がなくなりました。
Cassandra データモデリングの目標
データをモデリングする際には、次の目標を設定する必要があります。 Cassandra:
データを均等に分散させます Cluster
各ノードに同じ量のデータが必要です。 Cassandra Clusterデータは、主キーの最初の部分であるパーティション キーに基づいて、異なるノードに分散されます。したがって、クラスター全体にデータを均等に分散するには、主キーとして整数を選択するようにしてください。
データのクエリ中に読み取られるパーティションの数を最小限に抑える
パーティションは、同じパーティション キーを持つレコードのグループです。 読み取りクエリが発行されると、異なるパーティションの異なるノードからデータが収集されます。
多数のパーティションがある場合、クエリ データを収集するためにこれらすべてのパーティションにアクセスする必要があります。
パーティションを作成してはいけないという意味ではありません。 データが非常に大きい場合、その膨大な量のデータを XNUMX つのパーティションに保持することはできません。 単一のパーティションでは速度が低下します。
したがって、バランスの取れたパーティション数を選択するようにしてください。
良好な主キー入力 Cassandra
例を挙げて、どの主キーが適切であるかを調べてみましょう。
これが MusicPlaylist のテーブルです。
Create table MusicPlaylist ( SongId int, SongName text, Year int, Singer text, Primary key(SongId, SongName) );
上の例では、テーブル MusicPlaylist、
- Songid はパーティション キーであり、
- SongNameはクラスタリング列です
- データは SongName に基づいてクラスター化されます。SongId で作成されるパーティションは 1 つだけです。MusicPlaylist テーブルには他のパーティションは存在しません。
このデータ モデルでは主キーが間違っているため、データの取得が遅くなります。
こちらは別のテーブル MusicPlaylist です。
Create table MusicPlaylist ( SongId int, SongName text, Year int, Singer text, Primary key((SongId, Year), SongName) );
上の例では、テーブル MusicPlaylist、
- Songid と Year はパーティション キーであり、
- SongName はクラスタリング列です。
- データは SongName に基づいてクラスター化されます。このテーブルでは、毎年新しいパーティションが作成されます。その年のすべての曲は同じノード上にあります。この主キーはデータにとって非常に役立ちます。
このデータ モデルにより、データの取得が高速になります。
データをモデル化する Cassandra
クエリをモデル化する際には次の点に留意する必要があります。
どのクエリをサポートするかを決定する
まず最初に、どのようなクエリが必要かを決定します。
たとえば、必要ですか?
- ジョイン
- グループ化する
- どの列などでフィルタリングします。
クエリに従ってテーブルを作成する
クエリに従ってテーブルを作成します。 クエリを満たすテーブルを作成します。 最小限の数のパーティションを読み取る必要があるような方法でテーブルを作成するようにしてください。
での 1 対 1 の関係の処理 Cassandra
XNUMX 対 XNUMX の関係は、XNUMX つのテーブルが XNUMX 対 XNUMX の対応関係を持つことを意味します。 たとえば、学生が登録できる科目は XNUMX つだけですが、その学生がどの科目に登録されているかを学生で検索したいとします。
したがって、この場合、テーブル スキーマには、コース名、学生のロール番号、学生名など、特定のコースに対応する学生の詳細がすべて含まれる必要があります。
Create table Student_Course ( Student rollno int primary key, Student_name text, Course_name text, );
での 1 対多の関係の処理 Cassandra
XNUMX 対多の関係とは、XNUMX つのテーブル間に XNUMX 対多の対応関係があることを意味します。
たとえば、XNUMX つのコースを多数の学生が受講することができます。 特定のコースを学習しているすべての学生を検索したいと考えています。
したがって、コース名をクエリすると、特定のコースを学習する多くの学生の名前が得られます。
Create table Student_Course ( Student_rollno int, Student_name text, Course_name text, );
次のクエリにより、特定のコースのすべての学生を取得できます。
Select * from Student_Course where Course_name='Course Name';
での多対多の関係の処理 Cassandra
多対多の関係とは、XNUMX つのテーブル間に多対多の対応関係があることを意味します。
たとえば、XNUMX つのコースを多数の学生が学習することができ、また、XNUMX 人の学生が多数のコースを学習することもできます。
特定のコースを学習しているすべての学生を検索したいと考えています。 また、特定の学生が学んでいるコースをすべて検索したいと考えています。
したがって、この場合は XNUMX つのテーブルを用意します。つまり、問題を XNUMX つのケースに分割します。
まず、特定の学生のコースを検索できるテーブルを作成します。
Create table Student_Course ( Student_rollno int primary key, Student_name text, Course_name text, );
次のクエリを実行すると、特定の学生のすべてのコースを見つけることができます。
Select * from Student_Course where student_rollno=rollno;
次に、特定のコースを勉強している学生の数を確認できる表を作成します。
Create table Course_Student ( Course_name text primary key, Student_name text, student_rollno int );
次のクエリで特定のコースの学生を見つけることができます。
Select * from Course_Student where Course_name=CourseName;
RDBMSとの違い Cassandra データモデリング
RDBMS | Cassandra |
---|---|
データを正規化された形式で保存します | データを非正規化形式で保存します |
レガシー DBMS。 構造化データ | ワイドローストア、ダイナミック; 構造化データと非構造化データ |
まとめ
- におけるデータモデリング Cassandra 他とは違う RDBMSデータベース.
- Cassandra データモデリングにはいくつかのルールがあります。適切なデータ モデリングを行うには、これらのルールに従う必要があります。これらのルールに加えて、3 つの異なるデータ モデリングのケースとその対処方法について説明しました。
- XNUMX 対 XNUMX の関係は、XNUMX つのテーブルが XNUMX 対 XNUMX の対応関係を持つことを意味します。
- XNUMX 対多の関係とは、XNUMX つのテーブル間に XNUMX 対多の対応関係があることを意味します。
- 多対多の関係とは、XNUMX つのテーブル間に多対多の対応関係があることを意味します。