より多くのスレッドを使用する
スレッド/ドメインの比率を 1/6 から 30/1 に近い値に反転することをお勧めします。SimpleDB から大量のデータを取得するのにかかる時間のほとんどは、待機に費やされます。この状況では、スレッド数を増やすとスループットが大幅に向上します。
SimpleDB の制限の 1 つは、1 MB のクエリ応答サイズの上限です。これは、1 つのドメインで 50MB を引き下げるには、少なくとも 50 の選択 (元のページ + 追加の 49 ページ) が必要であることを意味します。次のリクエストには現在のレスポンスからの NextToken が必要なため、これらは順番に発生する必要があります。各 Select に 2 秒以上かかる場合 (応答が大きく、要求量が多い場合は珍しくありません)、各ドメインに 2 分を費やします。すべてのスレッドが 6 つのドメインのそれぞれを順番に繰り返し処理する必要がある場合、約 12 分かかります。ドメインごとに 1 つのスレッドで、簡単に約 2 分に短縮できます。
しかし、それよりもはるかに優れたことができるはずです。SimpleDB は同時実行のために最適化されています。ドメインごとに 30 スレッドを試して、各スレッドが 1 時間のうちにクエリを実行できるようにします。これは結局のところログ データであるためです。例えば:
SELECT * FROM domain WHERE timestamp between '12:00' and '12:02'
(明らかに、実際のタイムスタンプ値を使用します) 30 個のクエリはすべて、応答を待たずに開始できます。この方法では、ドメインごとに少なくとも 50 のクエリを作成する必要がありますが、すべてを順番に作成する代わりに、より多くの同時実行性を得ることができます。最高のスループットが得られるスレッド数を自分でテストする必要があります。選択条件を 1 分刻みに分割して、ドメインごとに最大 60 個まで試してみることをお勧めします。それが機能する場合は、完全に並列クエリが作成され、すべてのフォローアップ ページが削除される可能性が高くなります。503 ServiceUnavailable エラーが発生した場合は、スレッドを縮小します。
ドメインは SimpleDB のスケーラビリティの基本単位であるため、データを分割する便利な方法があると便利です。同時実行性を利用するだけです。13 分ではなく、同じリージョンの EC2 で実行されているアプリのデータを 13 秒で取得できたとしても驚かないでしょう。ただし、実際にかかる時間は、他の多くの要因によって異なります。
コストに関する懸念
補足として、あなたが問題を提起していなくても、あなたがしていることのコストについて言及しておく必要があります. CreateDomain と DeleteDomain は負荷の高い操作です。通常、あまり頻繁に使用することはお勧めしません。毎回約 25 秒のボックス使用量が課金されるため、1 時間ごとにボックスを作成および削除すると、ドメイン管理だけで月額約 70 ドルが加算されます. 言及した50MBよりも桁違いに多くのデータをドメインに保存できます。そのため、削除する前にデータをさらに蓄積させたい場合があります。クエリにタイムスタンプが含まれている場合 (またはタイムスタンプを含めるように作成できた場合)、ドメインに余分な GB の古いデータが含まれていても、クエリのパフォーマンスはまったく損なわれない可能性があります。いずれにせよ、GetAttributes と PutAttributes が大きなドメイン サイズでパフォーマンスに影響を与えることは決してありません。選択索引をうまく活用しないでください。確認するには、クエリをテストする必要があります。それは単なる提案です。概念的には、作成/削除の方がクリーンであることがわかります。
また、一度に 200 個の属性を書き込むのは、ボックスの使用法に癖があるため、コストがかかります。書き込み用のボックスの使用量は、属性の数の 3 乗に比例します。時間単位の式は次のとおりです。
0.0000219907 + 0.0000000002 N^3
基本料金に属性ごとの料金を加えたもの (N は属性の数)。あなたの状況では、1 回のリクエストで 200 個の属性すべてを書き込むと、ボックスの使用料金は 100 万アイテムあたり約 250 ドル (256 属性を書き込む場合は 100 万ドルあたり 470 ドル) になります。各リクエストをそれぞれ 50 個の属性を持つ 4 つのリクエストに分割すると、PutAttributes のボリュームは 4 倍になりますが、ボックスの使用料金は 100 万アイテムあたり約 28 ドルに減少します。リクエストを分解できる場合は、実行する価値があるかもしれません。それができない場合 (リクエストの量やアプリの性質が原因で)、SimpleDB はコストの観点から非常に魅力的ではないことを意味します。