回答:
開示:私はMySQLの従業員で、MySQL Clusterに取り組んでいます。
MySQL Clusterは、シャードされたMySQL + InnoDBよりも高いスループット/ホストを達成できると言えます。
レイテンシに関しては、MySQL ClusterにはシャードMySQLよりも安定したレイテンシが必要です。純粋にメモリ内のデータの実際のレイテンシは同様の可能性があります。
クエリがより複雑になり、データがディスクに保存されると、パフォーマンスの比較がより複雑になります。より具体的な回答を得るには、アプリケーションと実行するクエリ、さらにホストの数とデータの量について詳しく説明する必要があります。MySQL Clusterは最近、並列ローカライズされたクエリ実行(AQL)を獲得しました。これは、複数のホストにデータが分散されているにもかかわらず、スタンドアロンMySQLDと競合できることを意味します。
MySQL Clusterは現在、48ホスト以上の「シャーディング」に制限されています。理論上、シャードMySQLには制限がありません。ただし、特定のターゲットスループットに対して、シャードされたMySQLホストよりも少ないMySQL Clusterホストが必要になる場合があります。
より興味深い違いは、パフォーマンス以外の領域を見るときです:
アプリケーションにシャーディングが組み込まれていると、最大限のスケーリングの可能性が得られますが、クロスシャードクエリと操作に関して複雑さが増し、柔軟性が制限されます。シャーディングが時期尚早の場合は、問題の原因になっている可能性があります。MySQL Clusterを使用すると、アプリケーションをシングルシャードのみに制限することなく、シャーディングの利点の一部を利用できます。
前の回答に関して、いくつかの説明:
「MySQL ClusterはACIDに準拠していますが、複合キーを持つデータに適したストレージエンジンを提供していません。」
MySQL Clusterは、複合プライマリキーとセカンダリキーをサポートしています。何が「適切」ではないのかわかりません。おそらく、前のポスターで説明できますか?
「同じ重要な特性を持つデータを特定のデータノードのセットに保存するには、次のようにします。
- すべてのデータノードをオフラインにし、同じ主要な特性を持つデータを格納するデータノードのみを残します。
- データをMySQL Clusterにロードします。これにより、選択したデータノードのみが入力されます
- すべてのデータノードをオンラインに戻す」
これは間違っています。データの分散は、いつどのノードがオンラインになっているかとは無関係です。MySQL Clusterは、説明した最適化をサポートするために、さまざまなデータ分散スキームをサポートしています。ここでのブログ投稿でMySQL Clusterのデータ分布について説明します:MySQL Clusterのデータ分布