DSE Advanced ReplicationのCQLクエリー

DSE Advanced Replicationのエッジおよびハブ・クラスターでクエリーを実行する場合の、サポート対象CQLクエリーおよびベスト・プラクティスのガイドライン。

DSE Advanced ReplicationでサポートされているCQLクエリーおよびレプリケーションの概念に関するこの概要では、サポートされているCQLクエリーおよびベスト・プラクティスのガイドラインについて説明します。

DSE Advanced Replicationは、エッジ・クラスターからハブ・クラスターにデータをレプリケートします。レプリケーションはエッジでCQLクエリーを取得してから変更バージョンのクエリーを再作成し、それをハブで実行します。DataStax Enterpriseはデータ操作のために、有効なCQLクエリーの制限リストをサポートしています。DSE Advanced Replicationでは、ハブにデータをレプリケートするのに使用される、生成されたCQLクエリーに対して同じ制限が適用されます。

制限はプライマリ・キーに適用されます。プライマリ・キーは、パーティション・キーとクラスター化キーの2つの部分から構成されます。プライマリ・キーとオプションのフィールド値は、データベースの行を構成します。

エッジ・テーブルのプライマリ・キーとハブ・テーブルのプライマリ・キーに相違があった場合は、CQLクエリーがサポートされている方に制限が適用されます。

ベスト・プラクティス 

シームレスなレプリケーションを行うために、DataStaxでは、以下のベスト・プラクティスに従うことを推奨しています。
エッジ・テーブルおよびハブ・テーブルにおけるスキーマ構造
  • 同一のプライマリ・キー(パーティション・キーおよびクラスター化キー)の形式を同じ順序、同じカラムで維持します。
  • オプションのedge_idを最初のクラスター化カラムとして追加します。
  • すべてのフィールド値、またはフィールド値のサブセットを維持します。
パーティション・キー・カラム
パーティション・キーのサポートおよび制限の詳細を、以下に示します。
  • ハブでは、追加のオプションのedge_idカラムのみがパーティション・キーでサポートされます。追加のハブ・パーティション・キー・カラムはサポートされません。edge_idはクラスター化カラムまたはパーティション・キーのいずれかに使用できますが、両方に使用することはできません。
  • ハブのエッジ・パーティション・キー・カラムのサブセットを使用すると、上書きが発生する可能性があります。行エントリーには、多対一のマッピングがあります。
  • レプリケーションに順序は関係ありません。すべての配列がサポートされます。
  • CQL UPDATEクエリーには、すべてのパーティション・キー・カラムが完全に制限されていることが必要です。=またはIN(1つのカラム)制限を使用し、パーティション・キー・カラムを制限します。
  • CQL DELETEクエリーには、すべてのパーティション・キー・カラムが完全に制限されていることが必要です。=またはIN(1つのカラム)制限を使用し、パーティション・キー・カラムを制限します。

クラスター化カラム 

クラスター化カラムのサポートおよび制限の詳細について、以下に示します。
  • ハブでは、追加のオプションのedge_idカラムのみがクラスター化カラムでサポートされます。追加のハブ・パーティション・キー・カラムはサポートされません。edge_idはクラスター化カラムまたはパーティション・キーのいずれかに使用できますが、両方に使用することはできません。
  • ハブのエッジ・クラスター化カラムのサブセットを使用すると、上書きが発生する可能性があります。行エントリーには、多対一のマッピングがあります。
  • CQL INSERTおよびUPDATEの各クエリーを使用する場合、レプリケーションに順序は関係ありません。すべての配列がサポートされます。
  • CQL DELETEクエリーを使用する場合、レプリケーションに順序は関係あります。配列のサポートに制限があります。すべての配列がサポートされるわけではありません
  • CQL UPDATEクエリーには、すべてのクラスター化カラムが完全に制限されていることが必要です。=またはIN(1つのカラム)制限を使用し、パーティション・キー・カラムを制限します。
  • CQL DELETEクエリーには、最後に指定されたクラスター化カラムが=/>/>=/</<=(1つまたは複数のカラム)またはIN(1つまたは複数のカラム)を使用して制限されていることが必要です。最後に指定されたクラスター化カラムに先行するすべてのクラスター化カラムも、=またはINを使用して制限されていることが必要です。
  • クラスター化カラムの制限はオプションです。ただし、クラスター化カラムを制限する場合は、最初および最後の(順序の)クラスター化カラムの間にある、制限するクラスター化カラムはすべて制限する必要があります。

フィールド値 

フィールド値のサポートおよび要件の詳細について、以下に示します。
  • エッジにあるフィールド値のサブセット、またはすべてのフィールド値は、ハブへのレプリケーションがサポートされます。
  • エッジにはあるがハブにはないフィールドは、レプリケートされません。
  • ハブにはあるがエッジにはないフィールドは、データが追加されません。

エッジID(edge_id)

edge_idは、エッジ・クラスター、およびエッジ・クラスターからのすべての挿入を識別します。edge_idのサポートおよび要件の詳細について、以下に示します。
  • edge_id構成キーがメタデータに存在し、正当であることが必要です。
  • edge_idが、クラスター化カラムまたは任意のパーティション・キーの最初の位置にあることが必要です。

    そうでない場合、CQL INSERTおよびUPDATEの各クエリーは動作しますが、部分的に制限されたクラスター化カラムを使用したCQL DELETEクエリーは失敗する可能性があります。

  • CQL DELETEおよびUPDATEクエリーでは、edge_idは常に制限されます。クラスター化キーが完全に制限されておらず、edge_idが最初のクラスター化カラムでない場合、一部のDELETE文はサポートされません。