MySQLなどのRDBMSはスケーラブルではないという記事を読んだことがありますが、MongoDBなどのNoSQLはうまくシャーディングできます。 RDBMSが提供するどの機能がそれ自体をうまくシャーディングできないのか知りたいです。
3 に答える
ほとんどのRDBMSシステムは、いわゆるACIDプロパティを保証します。これらのプロパティのほとんどは、一貫性に要約されます。データを変更するたびに、データベースが1つの一貫した状態から別の一貫した状態に転送されます。
たとえば、1つのトランザクションで複数のレコードを更新する場合、データベースは、トランザクションが完了していない限り、関連するレコードが他のクエリによって変更されないようにします。そのため、トランザクション中に、変更のために複数のテーブルがロックされる場合があります。これらのテーブルが複数のシャード/サーバーに分散している場合、適切なロックを取得し、データを更新してロックを解放するのに時間がかかります。
CAP定理は、分散(つまりスケーラブル)システムが次のすべてのプロパティを同時に保証することはできないと述べています。
- 一貫性
- 可用性
- パーティションの許容範囲
RDBMSシステムは一貫性を保証します。シャーディングにより、システムはパーティショニングに対して耐性があります。定理から、システムはそのために可用性を保証できないということになります。そのため、標準のRDBMSは十分に拡張できません。可用性を保証することはできません。また、データベースにアクセスできない場合、データベースはどのようなメリットがありますか?
NoSQLデータベースは、可用性を優先して一貫性を落とします。そのため、スケーラビリティが優れています。
RDBMSシステムがまったく拡張できないと言っているのではなく、それはもっと難しいことです。この記事では、考えられるシャーディングスキームのいくつかと、発生する可能性のある問題について概説します。ほとんどのアプローチは一貫性を犠牲にします。これはRDBMSシステムの最も重要な機能の1つであり、スケーリングを妨げます。
NoSQLの人物とデュデットが結合を好まない理由:http ://www.dbms2.com/2010/05/01/ryw-read-your-writes-consistency/
複数のシャードを含むクエリは複雑です(異なるシャードのテーブル間のfe JOIN)