私はかなり前からMySQLを使用しており、その構造とSQLクエリなどに満足しています。
現在、AWSで新しいシステムを構築していますが、DynamoDBを検討しています。現在、私はそれについて少しだけ知っています。
一方が他方より優れていますか?
DynamoDBの利点は何ですか?
mySQLクエリなどからこのフラットスタイルDBへの移行はどのようなものですか?
それについてのAWSの説明を読むことができます こちら 。
つまり、主にLookupクエリ(Joinクエリではない)がある場合、DynamoDB(およびその他のNoSQL DB)の方が優れています。大量のデータを処理する必要がある場合、MySQL(および他のRDBMS)を使用する場合は制限されます。
MySQLクエリやデータスキーマを再利用することはできませんが、NoSQLを学習するための努力を費やす場合は、重要なツールをツールボックスに追加します。 DynamoDBが最も単純なソリューションを提供している多くの場合があります。
本当にDynamoDBとMySQLはリンゴとオレンジです。 DynamoDBはNoSQLストレージレイヤーであり、MySQLはリレーショナルストレージに使用されます。アプリケーションの実際のニーズに基づいて、使用するものを選択する必要があります。実際、一部のアプリケーションは両方を使用することで十分に機能する場合があります。
たとえば、単一のキーまたはキー/範囲の組み合わせに対して検索できるリレーショナルスキーマ(ツリー構造、スキーマレスJSON表現など)に適さないデータを格納している場合、DynamoDB(または他のNoSQLストア)が最善の方法です。
リレーショナル構造にうまく適合するデータ用の明確に定義されたスキーマがあり、多くの異なる方法でデータをクエリする柔軟性が必要な場合(もちろん必要に応じてインデックスを追加する場合)、RDSがより良いソリューションになる可能性があります。
DynamoDBをNoSQLストアとして使用する主な利点は、クラスター化されたデータストアの管理を心配することなく、必要なレベルで読み取り/書き込みスループットを保証できることです。そのため、アプリケーションが1秒あたり1000回の読み取り/書き込みを必要とする場合、そのレベルのスループット用にDynamoDBテーブルをプロビジョニングするだけでよく、基盤となるインフラストラクチャを心配する必要はありません。
RDSには、インフラストラクチャ自体を心配する必要がないという同じ利点がありますが、最大インスタンスサイズが維持できなくなるまで大量の書き込みを行う必要が生じた場合は、オプション(リードレプリカを使用して読み取りの水平方向にスケーリングできます)。
更新されたメモ:DynamoDbはグローバルセカンダリインデックスをサポートするようになったため、ハッシュまたはハッシュキーと範囲キーの組み合わせ以外のデータフィールドで最適化されたルックアップを実行できるようになりました。
DynamoDBテーブルをすべてRDS MySQLに移行しました。
特定のタスクにDynamoDBを使用するのは理にかなっているかもしれませんが、DynamoDBの上に新しいシステムを構築するのは本当に悪い考えです。最適なプランなど、DBの柔軟性を常に必要とします。
DynamoDBから移行した理由は次のとおりです。
現在、DynamoDBを一部のシステムのバックアップとして使用しており、将来、特定の明確に定義されたタスクに使用することになると確信しています。それは悪いDBではありません。コアシステムの100%を提供するのはDBではありません。
利点に関しては、スケーラビリティと耐久性と言えます。信じられないほど透過的にスケーリングし、常に(一種の)アップします。これらは本当に素晴らしい機能ですが、欠点を補うものではありません。
DynamoDBを使用する場合、DynamoDBのアイテム/レコードが400KBに制限されていることも知っている必要があります( DynamoDBの制限 を参照)。多くのユースケースでは、これは機能しません。したがって、DynamoDBはすべてではなく、いくつかのことに適しています。他の多くのNoSQLデータベースについても同様です。