20

水平分割...多くのテーブルを作成できることを知っています。

複数のサーバーでこれをどのように行うことができますか?これにより、Mysqlをスケーリングできます。

Xサーバー上にXテーブルを作成しますか?

誰かが説明したり、複数のサーバー間でパーティションを作成する方法を教える優れた初心者向けチュートリアル(ステップバイステップ)を持っている人はいますか?

4

3 に答える 3

23

MySQL では、一般にアプリケーション ベースのシャーディングと呼ばれるものが使用されます。

簡単に言えば、複数のデータベース サーバーで同じデータベース構造を持つことになります。ただし、同じデータは含まれません。

たとえば、次のようになります。

Users 1 - 10000: server A
Users 10001 - 20000: server B

シャーディング (もちろん) はバックアップ手法ではなく、クラスター全体に読み取りと書き込みを分散することを目的としています。

たとえば、シャードに使用される手法は MySQL-Proxy です。これは HScale が考案したものではなく、読み取りと書き込みを異なるバックエンド サーバーに分散する多かれ少なかれ単純な LUA スクリプトです。MySQL forge にはたくさんの例があるはずです。

別のツール (MySQL Proxy に基づく) はSpockProxyです。シャーディング向けに完全に調整されています。彼らはまた、Luaを取り除き、プロキシよりも高速にするためにさまざまなことに取り組みました. これまでのところ、SpockProxy をテストしただけで、本番環境で実行したことはありません。

これらのプロキシとは別に、自分自身もシャーディングできます。マスターテーブルが必要です。例:

-------------------
| userA | server1 |
| userB | server2 |
| userC | server1 |
-------------------

次に、サーバーに対する読み取りと書き込みを構築します。あまりきれいではありませんが、うまくいきます。次の障害は、よりフォールト トレラントにすることです。したがって、たとえば、server1server2およびserver3それぞれが小さなクラスターである必要があります。

最後になりましたが、サーバー間でデータとインデックスを分割するもう 1 つの興味深いアプローチは、Digg のIDDBです。彼らがそのコードをリリースしたかどうかはわかりませんが、彼らのブログ投稿には、その機能に関する詳細が記載されています。

これが役立つかどうか教えてください!

于 2009-10-25T19:12:04.457 に答える
4

ただし、何らかの理由でこのソリューションをクラウドに移行してマルチテナントにしたい場合、上記の構成はより困難になる可能性があることに注意する必要があります。これについて考えます -

  1. システムにログインすると、ユーザー組織テーブルに基づいて DB が選択されます (DB スワップ)。
  2. これは、独自のスレーブを使用して現在話している新しいマスター テーブルになります。
  3. ただし、スケールアウトがボトルネックにならないようにする必要があるため、上記のポイント 2 にもシャーディングが必要です。

したがって、問題は、通常、スレーブが読み取り用でマスターが書き込み用である mster-slave のような env で、このシャーディングをどのように行うことができるかを考える必要があるということです。

乾杯 !ゲイリー

于 2011-04-23T03:42:03.523 に答える
0

HSCALE 0.1 の発表時に書かれている内容は次のとおりです。

現時点では巨大なテーブルを分割するだけで済みますが、後でパーティションを複数の MySQL サーバー インスタンスに分散させて、実際に水平方向にスケールアウトしたいと考えています。最も困難な部分は、分散トランザクション (XA) を使用するか、異なるホスト上のパーティションを含むトランザクションを許可しないトランザクションを処理することです...

このプロジェクトを見てください: http://sourceforge.net/projects/hscale/おそらくあなたに適しているでしょう。

于 2009-10-23T09:33:26.183 に答える