ADO.NET Provider for Amazon DynamoDB

Build 21.0.7927

データのクエリ

DynamoDB には、テーブルからデータを読み出す2つの異なる操作、クエリとスキャンがあります。CData ADO.NET Provider for Amazon DynamoDB は、SQL ステートメントのWHERE 句に基づいて、どちらのタイプを使用するかを自動的に判断します。

クエリ VS スキャン

DynamoDB では、結果が返される前に一部のデータをフィルタリングできるときに、クエリが使われます。これは、フィルタを実行するためにテーブルに定義されているパーティションキーとソートキーの使用により行われます。これは通常、スキャンよりもはるかに高速です。

パーティションキーまたはソートキー以外のものがデータをフィルタするために使用されると、スキャンが実行されます。スキャンの場合、データは返された後にのみフィルタリングされます。これは、DynamoDB がすべての結果を返すことになり、一致しない結果を単にレスポンスから除外するため、非常に遅くなります。最悪の場合、一致する結果がないために全ページのデータが空で返されます。

セカンダリインデックス

DynamoDB のセカンダリインデックスは、特定のテーブルからしかアクセスできないテーブルのように動作します。セカンダリインデックスは、あらかじめ定義されたカラムを持つか、単にすべてのカラムがアクセス可能であるビューのように動作します。主な違いは、異なるパーティションキーとソートキーが選択される点です。使用するキーに制限はありません。テーブル自体と同じパーティションキーとソートキーでも、異なるセカンダリインデックスのキーと同じでも、そのインデックスに固有のキーでも構いません。

本製品 はデフォルトで、クエリ操作を実行するためにセカンダリインデックスを使用する必要があるかどうかを判断します。これは、SQL ステートメントのWHERE 句を分析することで行われます。クエリを使用する必要があり、そのクエリに特定のインデックスを使用する必要があると判断された場合、セカンダリインデックスが自動的に選択されます。

セカンダリインデックスは、SecondaryIndex 疑似カラムを使用して明示的に指定できます。次に例を示します。

SELECT * FROM Table WHERE SecondaryIndex = 'ColumnName' AND ...

クエリ例

WHERE句に '=' 演算子を含む単一のPartitionKey が含まれ、オプションで、DynamoDB がサポートする演算子を使用するSortKey が1つ含まれている場合、クエリ操作はDynamoDB に送信されます。次に例を示します。

SELECT * FROM Table WHERE PartitionKey = 'x'

SELECT * FROM Table WHERE PartitionKey = 'x' AND SortKey > 'y' AND SortKey < 'z'

次に例を示します。

SELECT * FROM Table WHERE SecondaryIndexPartitionKey = 'x'

上のクエリは、それが指定されたPartitionKey を使用した唯一のクエリであれば、SecondaryIndex に対してクエリを実行します。

セカンダリインデックスは、SecondaryIndex 疑似カラムを使用して明示的に指定できます。これにより、クエリまたはスキャンのどちらが送信されたかに関わらず、指定されたインデックスが使用されます。

SELECT * FROM Table WHERE SecondaryIndex = 'IndexName'

パラレルスキャン

結果をスキャンする際のパフォーマンスを向上させるために、パラレルスキャンを使用することができます。パラレルスキャンとは、複数のスレッドを使用して同じSELECT ステートメントを実行する方法です。各スレッドは、均等にデータを取得します。スレッドは独立してデータを取得するため、指数関数的にパフォーマンスが向上します。ただし、この方法によるパフォーマンスの向上は、CPU のパフォーマンス、コア数、帯域幅の制約、テーブルの読み込みユニットにより制限されます。より多くのコア数と帯域幅を持つマシンでは、追加のスレッドを使用することで恩恵を受けるかもしれませんが、より少ないコア数と帯域幅のマシンでは利益は見込めません。

Amazon DynamoDB では、結果をクエリする際はパラレルスキャンと同等機能は提供されません。クエリは単一のスレッドでのみ実行できます。

デフォルトでは、パラレルスキャンが有効になっています。ThreadCount 接続プロパティを更新することで、無効にしたり変更したりできます。

パラレルスキャンを使用すると、単一のスレッドを使用するよりもはるかに高速に、特定のテーブルに対して割り当てられた読み込みユニットが消費されることに注意してください。スロットル例外が発生している場合は、ThreadCount を減らすか、1に設定することをお勧めします。

Copyright (c) 2021 CData Software, Inc. - All rights reserved.
Build 21.0.7927