パフォーマンスのみを考慮すると、MySQLクラスターはカスタムデータシャーディングMySQLソリューションに勝ることができますか?シャーディング=水平分割
シャーディングについて言及する場合、アプリケーションレイヤーで作成されたシャーディングを検討しています。たとえば、独立したMySQLインスタンス間でレコードを均等に分散します。 2つのサーバーの場合、(キーmod 2)の可能性があります。
開示:私は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でのデータ配布