96

MySQL テーブルをシャーディングするための最良のアプローチは何ですか。私が考えることができるアプローチは次のとおりです。

  1. アプリケーションレベルのシャーディング?
  2. MySQL プロキシ層でのシャーディング?
  3. シャーディング用の中央検索サーバー?

この分野で興味深いプロジェクトやツールを知っていますか?

4

6 に答える 6

12
  1. アプリケーション レベルのシャーディング: dbShards は、「アプリケーションを意識したシャーディング」を行う唯一の製品です。ウェブサイトにはいくつかの良い記事があります。当然のことながら、アプリケーション対応のシャーディングはより効率的になります。アプリケーションが、トランザクションを検索したり、プロキシによってリダイレクトされたりすることなく、トランザクションの行き先を正確に認識している場合、それ自体が高速になります。また、誰かがシャーディングを検討している場合、速度は唯一の懸念事項ではないにしても、多くの場合、主要な懸念事項の 1 つです。

  2. プロキシを使って「シャード」する人もいますが、私の目にはそれはシャーディングの目的に反しています。別のサーバーを使用して、トランザクションにデータの検索場所または保存場所を指示しているだけです。アプリケーション アウェア シャーディングを使用すると、アプリケーションは自分でどこに行くべきかを認識します。はるかに効率的です。

  3. これは本当に#2と同じです。

于 2011-04-04T16:34:47.163 に答える
7

この分野で興味深いプロジェクトやツールを知っていますか?

この分野でのいくつかの新しいプロジェクト:

  • citusdata.com
  • spockproxy.sourceforge.net
  • github.com/twitter/gizzard/
于 2012-06-29T12:35:08.830 に答える
5

もちろんアプリケーションレベル。

この本で見つけた今までにない最高のアプローチ

ハイパフォーマンスMySQLhttp ://www.amazon.com/High-Performance-MySQL-Jeremy-Zawodny/dp/0596003064

簡単な説明:データを多くの部分に分割し、各サーバーに最大50の部分を保存できます。シャーディングの2番目に大きな問題であるリバランスを回避するのに役立ちます。それらのいくつかを新しいサーバーに移動するだけで、すべてがうまくいきます:)

購入して「mysqlスケーリング」の部分を読むことを強くお勧めします。

于 2011-04-14T09:58:56.330 に答える
4

2018年現在、それに対するMySqlネイティブのソリューションがあるようです。実際には少なくとも 2 つ - InnoDB ClusterNDB Cluster (商用バージョンとコミュニティ バージョンがあります) があります。

MySql community edition を使用するほとんどの人は InnoDB エンジンに精通しているため、これは最優先事項として調査する必要があります。すぐに使用できるレプリケーションとパーティショニング/シャーディングをサポートし、さまざまなルーティング/負荷分散オプションの MySql Router に基づいています。

テーブル作成の構文は、次のように変更する必要があります。

    CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATETIME) PARTITION BY HASH ( YEAR(col3) );

(これは 4 つのパーティショニング タイプの 1 つにすぎません)

1 つの非常に重要な制限:

InnoDB 外部キーと MySQL パーティショニングには互換性がありません。パーティション化された InnoDB テーブルは、外部キー参照を持つことも、外部キーによって参照される列を持つこともできません。外部キーを持つ、または外部キーによって参照される InnoDB テーブルはパーティション化できません。

于 2018-10-28T22:41:27.913 に答える