web-dev-qa-db-ja.com

MySQLシャーディングvs MySQL Cluster

パフォーマンスのみを考慮すると、MySQLクラスターはカスタムデータシャーディングMySQLソリューションに勝ることができますか?シャーディング=水平分割

シャーディングについて言及する場合、アプリケーションレイヤーで作成されたシャーディングを検討しています。たとえば、独立したMySQLインスタンス間でレコードを均等に分散します。 2つのサーバーの場合、(キーmod 2)の可能性があります。

13
gsb

開示:私は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はすべてのシャードで任意のトランザクションをサポートします
  • MySQL Clusterは、自動フェイルオーバーとリカバリを使用してシャードの同期レプリケーションをサポートします
  • MySQL Clusterはオンラインのノード追加(クラスター拡張)をサポートします
  • シャード化されたMySQLはより「独自のロール」です

アプリケーションにシャーディングが組み込まれていると、スケーリングの可能性が最大になりますが、クロスシャードクエリとオペレーションに関して複雑さが増し、柔軟性が制限されます。シャーディングが時期尚早である場合は、それがいくつかの問題の原因である可能性があります。 MySQL Clusterを使用すると、アプリケーションをシングルシャードのみに制限する必要なく、シャーディングのいくつかの利点を得ることができます。

以前の回答について、いくつかの説明:

「MySQL ClusterはACIDに準拠していますが、複合キーを持つデータに適したストレージエンジンを提供していません。」

MySQL Clusterは複合プライマリおよびセカンダリキーをサポートしています。何が「適切」ではないのかわからない。おそらく前のポスターで説明できますか?

「同じ主要な特性を持つデータを特定のデータノードのセットに格納するには、次のようにします。

  1. すべてのデータノードをオフラインにし、同じ主要な特性を持つデータを格納するデータノードのみを残します。
  2. MySQL Clusterにデータをロードします。これにより、選択したデータノードのみが読み込まれます
  3. すべてのデータノードをオンラインに戻します」

これは誤りです。データの分散は、どのノードがいつでもオンラインになることとは無関係です。 MySQL Clusterは、記述された最適化をサポートするために、さまざまなデータ分散スキームをサポートしています。 MySQL Clusterでのデータ配布については、こちらのブログ投稿で説明しています: MySQL Clusterでのデータ配布

21
Frazer Clement