結合

Oracle NoSQL Databaseでは、現在、従来のリレーショナル・データベース・システムにある一般的な結合演算子はサポートされていません。ただし、同じ表階層に属する表間の特殊な結合はサポートされます。同じ場所にある行のみが互いに一致する場合があるため、このような結合は効率的に実行できます。その結果、サーバー間での大量のデータの転送が回避されます。

JOIN句は、2つ以上の表の行を、それらの表の関連列に基づいて結合するために使用します。結合は主に、ユーザーが階層関係を持つ表からデータを抽出しようとするときにOracle NoSQL Databaseで使用されます。

Oracle NoSQL Databaseに階層表が必要なのはなぜですか。

Oracle NoSQL Databaseでは配列やマップなどのデータ型がサポートされているため、親行ごとに、一致する子行を配列またはマップ内の親行自体に格納できると考えることができます。ただし、このようにすると、親行が非常に大きくなり、パフォーマンスが低下する可能性があります。これは、Oracle NoSQL Databaseストアの追加のみのアーキテクチャの場合に特に当てはまり、行が更新されるたびに新しいバージョンの行全体が作成されます。したがって、子表は、各親行に多数の子行が含まれるとき、または子行が大きいときに考慮する必要があります。また、子行がそれほど頻繁にアクセスされない場合や、頻繁に更新される場合は、子表を使用するほうが魅力的になります。

Oracle NoSQL Databaseの階層表は次のとおりです。

  • 書込み量の多いワークロードには非常に効率的です。
  • ファイングレイン認可の柔軟性を高めます。認可は、リソースにアクセスするためにユーザーに付与される権限です。ファイングレイン認可では、リソースに対してユーザーに付与されるアクセス権は、実行時の条件によって異なる場合があります。階層設定では、親表に付与されるアクセス権が子表に付与されるアクセス権と異なる場合があるため、柔軟性が高くなります。

Oracle NoSQL Databaseでの階層表の動作

KVStoreのレプリケーション・ノードはシャードに編成されます。1つのシャードには複数のレプリケーション・ノードと1つのマスター・ノードが含まれます。シャード・キーは、スケーラビリティのためにOracle NoSQL Databaseクラスタ全体にデータを分散するために作成されます。同じシャード・キーを持つレコードは、簡単に参照およびアクセスできるように同じ場所に配置されます。階層表では、子表は親表の主キー列を継承します。これは暗黙的に行われ、子のCREATE TABLE文に親列が含まれることはありません。階層内のすべての表には、同じシャード・キー列があります。

Oracle NoSQL Databaseでの表の結合

Oracle NoSQL Databaseの同じ階層内の表を結合するには、次の2つの方法があります。

  • NESTED TABLES句
  • LEFT OUTER JOIN