0

トランザクション データ用に DynamoDB データベースを実行し、SQL 結合クエリが必要なデータ用に mysql データベースを実行しようとしています。

大量の/大きなテーブルを MySQL から除外する (パフォーマンスを向上させる) ために、MySQL のデータに対して参照する必要がある場合があるいくつかのデータを DynamoDB に移動します。

特定のデータについて DynamoDB にクエリを実行し、MySQL にクエリを実行してから、PHP (または別のサーバー側言語) で最終的なデータ比較を実行して、必要なデータをクライアント/ブラウザに返すのは、プログラミング/クエリが不十分ですか?

基本的な質問は次のとおりだと思います:NoSQLおよびSQLデータベースにクエリを実行して、結果をphp(またはサーバー側言語)で処理する必要があります...これは正常ですか、それとも悪い考えですか?

どうも

注: これの主な目的は、管理不能な大規模なリレーショナル データベースの状況を回避するためのデータベース計画です。したがって、バルクデータをNoSQL(DynamoDB)に移動したい...

4

2 に答える 2

4

データを異なるデータ ストアに分け、それぞれに利点があることをお勧めします。

例えば:

  • BLOB を RDBMS に (MySQL として) 配置できますが、Amazon S3としてストレージに配置することをお勧めします。
  • テキスト ドキュメントを RDBMS に配置し、"... LIKE %QUERY%..." でクエリを実行できますが、Elastic Search またはAmazon CloudSearchに配置することをお勧めします。
  • セッション管理データを RDBMS に入れることもできますが、Amazon Elastic CacheまたはDynamoDBに入れることをお勧めします
  • ルックアップ テーブルを RDBMS に配置することもできますが、メモリ内またはメモリ ベースの NoSQL (Memecached または Redis など) または DynamoDB 内に配置することをお勧めします。

また、上記のステートメントを別の方法で記述して、すべてを MongoDB または DynamoDB に格納することもできますが、別の場所に配置することを好みます。

データをさまざまなストアに配置する場合、データの種類とこのデータの使用法に関連するこのデータ ストアの単純さに基づいて、より単純で、分散され、スケーラブルで、通常はより高速なシステムを取得できます。

欠点は、データ ストア間でデータを同期する必要があることです。DynamoDB にレコードを追加したら、BLOB を S3 にアップロードし、CloudSearch でドキュメントを更新してレコードを MySQL に追加し、今後の分析のために関連する行をログ ファイルに書き込む必要があります。もちろん、これは、そのような複雑なデータとクエリを持つ極端なケースです。通常、2 つまたは 3 つのデータ ストアを混在させるだけで済みます。

システムにトランザクションが必要な場合、データを同期するのは非常に困難になるため、トランザクションをサポートするデータ ストアにすべてのデータを格納することをお勧めします。ただし、その場合でも、トランザクションの要件をデータの一部に制限し、他のデータ ストアの冗長データと一緒に暮らすことができます。たとえば、RDBMS または DynamoDB に参照レコードがない孤立した S3 オブジェクトを持つことは、通常は大きな問題ではありません。

分散データを操作するために書いている PHP (または他のプログラミング言語) コードを持つことに関しても、状況によって異なります。データ ストアでネイティブにサポートされている複雑な JOIN、GROUP_BY、FILTER 機能が必要な場合は、DB 機能を使用することをお勧めします。しかし多くの場合、適切な DB にクエリを実行し (たとえば、CloudSearch へのテキスト検索)、さまざまなデータ ストアからデータを組み立てるなど、コードを簡単に記述できます。

于 2012-12-21T08:58:01.167 に答える
1

はい、確かに両方を使用できます...しかし、それにはいくつかの長所と短所があります..短所

  • MySQL では ACID 保証が得られますが、Dynamo-db ではそのような保証はありません。
  • また、MySQL では複雑なクエリを記述できますが、Dynamo-db では複雑なクエリを記述できません。

長所:

  • 分散ハッシュ テーブルのプロパティがあるため、MySQL と比較してパフォーマンスが向上します。

詳細については、このブログを参照してください。ここにリンクがあります!

HIVEQL などの NoSql モジュールをさらに使用することもできます。HiveQl は Dynamo-DB よりもはるかに優れており、Dynamo-db よりもパフォーマンスを少し向上させることができます。

于 2012-12-21T07:43:45.243 に答える