0

VoltDBの下ではいけない

http://community.voltdb.com/DosAndDonts

彼らは述べています

特にマルチパーティショントランザクションの場合、大量のデータを返すクエリ(制約のないSELECT * FROM FOOなど)を作成しないでください。ストアドプロシージャによって返されるデータは控えめにしてください。

これは私が持っているユースケースの1つです。このタイプのクエリに適さないストアドプロシージャの側面はありますか、それともVoltDBに固有のものですか?このシナリオでは、パフォーマンスはPostgresなどの従来のRDBMSよりも悪いレベルに低下しますか?

編集:私のクエリはfooからの選択*ではありませんが、特定の日付範囲の間のすべての金融取引を選択する必要があり、これは1億行を超える可能性があります

4

3 に答える 3

3

すべてのデータベースは、大規模な結果セットをユーザーに転送するために実体化と I/O のコストを支払う必要があります。

ただし、特に VoltDB について話すことはできます。

VoltDB では、ストアド プロシージャはすべてトランザクションです。データベースの大部分を選択する結果セットでさえ、他の並行プロシージャから完全に分離されています。その結果セット内のタプルは、一時的に内部的にバッファリングされ (たとえば、クロスパーティションの順序付けまたは制限のために)、ユーザーに返される必要があります。

ユーザーに返される I/O に数ミリ秒 (または数秒) かかる可能性がある結果に対して完全な分離を維持する必要があることと、マルチパーティション プロシージャの調整ノードで発生する集計の組み合わせにより、結果セットの最大サイズが制限されます。 .

将来のリリースでこの制限に対処すると思われます.多くの人は、あなたが説明したのと同様のデータアクセス要件を持っています.

于 2011-09-25T14:50:22.613 に答える
1

パフォーマンスの問題は、大規模なデータ転送の問題です。これは通常、すべてのデータベースに当てはまります。

データベースが大量のデータを返す必要がある場合、大量のリソース (メモリ、CPU、ネットワーク IO など) を使用する必要があり、パフォーマンスが低下します。

ネットワーク IO だけでも問題になる可能性があります。これは、データ転送が完了するまでネットワークを通過することができない大量のデータであるかのようです。

于 2011-09-22T21:05:26.603 に答える
0

結果をユーザー インターフェイスに表示するために SELECT * FROM FOO をクエリしている場合、または同様のユース ケースでは、ページングは​​、返されるデータのサイズとトランザクションの実行時間を制限するための適切な方法です。にページングの例があります。

VoltDB からデータを抽出して別のデータベースまたはシステムにエクスポートしようとしている場合は、VoltDB のExportを使用することをお勧めします。

于 2012-02-09T20:18:48.703 に答える