3

シンガポール リージョンでホストされている一連の AWS サービスを使用しています。いくつかの EC2 インスタンスと RDS インスタンスがあります。一部のデータを Amazon DynamoDB に移行することを計画していました。これは、アプリケーション データの設計に役立ちます。

残念ながら、DynamoDB は常に RDS よりも低速です。EC2 インスタンスと同じリージョンに作成されたテーブルに 1 つの行を書き込みました。AmazonAWS SDK for php を使用すると、この行を読み取るのに 1 秒以上かかり、mysql を使用して RDS から行を取得すると、その 10 分の 1 以上かかります。

これを最適化するためにできることはありますか? SSL を無効にしましたが、大きな違いはないと思います。

4

3 に答える 3

6

おそらく。DynamoDB にはかなりのレイテンシーがあり、RDS でホストされたデータベース (MySQL、SQL Server、Oracle) よりも厚いアプリケーション スタック上で実行されます。

ただし、IMO によると、DynamoDB (およびほとんどの NoSQL データベース) の主な利点は、レイテンシーが信頼できることです。レコードの取得で 400 ミリ秒のレイテンシーが発生している場合は、1 セッションまたは 100,000 セッションで 400 ミリ秒のレイテンシーを期待できます。

[注: 1 秒は長い時間のように思えます。ほとんどの場合、1 秒未満で複数のレコードを取得できますが、PHP 固有の SDK (.Net のみ) に DynamoDB メソッドを実際に使用したことはありません。他の何かがボトルネックになっているのではないかと思います。]

于 2012-06-20T14:47:41.230 に答える
6

以前のコメントを見ると、スキャンが問題だと思います。絶対に必要な場合にのみ使用したいと本当に思っています。つまり、分析のためにデータを map reduce にフィードしたり、それらの線に沿って何かをしたりする場合です。私が知る限り、スキャンは実際にはすべてのレコードを調べて、基準 (sloooowww) に一致するアイテムを探します。get/query は適切にインデックス化されたハッシュ/範囲キーから機能します。

可能であれば、ハッシュ/範囲キーからクエリできるようにデータを構造化する必要があります。それが不可能な場合は、メタデータ/クエリフィールドをクラウドサーチに入れ、それを使用して ID を返し、アイテムを直接取得することを検討できますダイナモから。いくつかの非正規化テーブルを設定することもできます (異なるテーブルで同じデータを再構築して、異なる範囲キーを持つようにします)。

PHP SDK を使用した get および query コマンドでは、これらの長い待ち時間は発生しません。

于 2012-06-20T16:49:26.263 に答える
1

AWS SDK for PHP で DynamoDB を使用している場合は、使用している SDK のバージョンを最新の状態に保つ必要があります。具体的には、DynamoDB 操作で最高のパフォーマンスを得るには、バージョン 1.5.9 以降を使用する必要があります。最近解決されたいくつかの問題は、一部のリクエストに余分なレイテンシーを追加していたので、これは大いに役立つかもしれません.

また、DynamoDB は最近、リクエストに署名するための AWS SignatureV4 のサポートを追加しました。これにより、SDK が以前に取得してキャッシュした STS 資格情報が不要になります。これは、パフォーマンスの向上にも貢献するはずです。

于 2012-07-18T15:34:42.547 に答える