私はcassandraが初めてです。ここには、2つのテーブルEVENTS
とTOWER
があります。いくつかのクエリのためにそれらを結合する必要があります。しかし、私はそれを行うことができません。
EVENTS
テーブルの構造:
eid int PRIMARY KEY,
a_end_tow_id text,
a_home_circle text,
a_home_operator text,
a_imei text,
a_imsi text,
TOWER
テーブルの構造:
tid int PRIMARY KEY,
tower_address_1 text,
tower_address_2 text,
tower_azimuth text,
tower_cgi text,
tower_circle text,
tower_id_no text,
tower_lat_d text,
tower_long_d text,
tower_name text,
次に、これらのテーブルをEID
とTID
に関して結合して、両方のテーブルのデータをフェッチできるようにします。
Cassandra =参加なし。モデルは100%リレーショナルです。 Cassandraで再考する必要があります。 これらのスライド をご覧になることをお勧めします。彼らは、cassandraのデータをモデル化する方法を詳しく調べます。また、トピックをカバーする webinar もあります。しかし、リレーションが必要な場合、cassandraは仕事のためのツールではないため、外部キーを考えてテーブルを結合するのはやめてください。
しかし、なぜ?
その後、整合性をチェックし、リレーショナルデータベースが行う他の多くのことを行う必要があるため、cassandra=が提供するパフォーマンスとスケーラビリティを失います。
何ができますか?
非正規化! 1つのテーブルに大量のデータがありますか?しかし、テーブルには列が多すぎます!
そう? Cassandra=テーブル内の非常に多くの列を処理できます。
他にできることは、クライアントアプリケーションで結合をシミュレートすることです。コード内の2つのデータセットを一致させますが、すべての情報を反復処理する必要があるため、これは非常に遅くなります。
別の方法は、複数のクエリを実行することです。目的のイベントを選択してから、一致するタワーを選択します。
Cassandra=でテーブルを結合してクエリを実行する方法はいくつかあります。もちろん、データモデルパーツを再考する必要があります。
PlayOrmは、パーティションを結合できる特別なスケーラブルSQL言語を使用して、スケーラブルシステムで結合を行うための優れたオプションです(つまり、10億行と別の10億行を結合したくない)。多数のnoSQLパターンがあり、必要に応じてクライアント側の結合を使用してnoSQLパターンを模倣するために、休止状態およびJPAから完全に分離されています。