この質問はすでに AWS フォーラムに投稿されていますが、まだ回答がありませんhttps://forums.aws.amazon.com/thread.jspa?threadID=94589
短いアイテム (約 1 億 2000 万個) の長いリストの最初のアップロードを実行して、後で一意のキーで取得しようとしていますが、DynamoDb の完璧なケースのようです。
ただし、現在の書き込み速度は非常に遅く (100 回の書き込みあたり約 8 ~ 9 秒)、最初のアップロードはほとんど不可能です (現在のペースでは約 3 か月かかります)。
回答を求めて AWS フォーラムを読み、次のことをすでに試しました。
単一の「put_item」呼び出しから 25 アイテムのバッチ書き込み (推奨される最大バッチ書き込みサイズ) に切り替えましたが、各アイテムは 1Kb 未満です (これも推奨されます)。25 個のアイテムでも 1Kb 未満であることは非常に一般的ですが、保証されていません (DynamoDB では 1 つのアイテムのサイズのみが重要であるため、問題にはなりません)。
最近導入された EU リージョン (私は英国にいます) を使用して、set_region('dynamodb.eu-west-1.amazonaws.com') を呼び出してエントリ ポイントを直接指定します。PHP でそれを行う方法は他にないようです。 API。AWS コンソールは、テーブルが適切なリージョンにあることを示しているため、機能します。
disable_ssl() を呼び出して SSL を無効にしました (100 レコードあたり 1 秒短縮)。
それでも、100 項目のテスト セット (25 項目に対して 4 回のバッチ書き込み呼び出し) では、インデックス作成に 8 秒以上かかることはありません。すべてのバッチ書き込みリクエストには約 2 秒かかるため、最初のリクエストが瞬時に行われ、その後のリクエストが遅くなるわけではありません。
私のテーブル プロビジョニング スループットは 100 書き込みユニットと 100 読み取りユニットで、これまでのところ十分なはずです (念のため、より高い制限も試してみましたが、効果はありません)。
また、リクエストのシリアル化にいくらかの費用がかかることも知っているので、おそらくキューを使用してリクエストを「蓄積」できますが、それは本当にbatch_writesにとってそれほど重要ですか? 単一のリクエストでも時間がかかりすぎるため、それは問題ではないと思います。
リクエストを高速化するために API の cURL ヘッダー (特に「Expect:」) を変更する人がいることがわかりましたが、それは適切な方法ではないと思います。また、そのアドバイスが投稿されてから API が更新されました。
私のアプリケーションが実行されているサーバーも問題ありません.CPU負荷が屋根を通り抜けることがあることを読んだことがありますが、私の場合はすべて問題ありません.ネットワークリクエストに時間がかかりすぎているだけです.
私は今立ち往生しています - 他に試すことができるものはありますか? 十分な情報が提供されていない場合は、お気軽にお問い合わせください。
どうやら同じ問題に関する他の最近のスレッドがここにあります(ただし、これまでのところ回答はありません)。
このサービスは超高速であるはずなので、最初はその問題に本当に戸惑いました。