水平分割...多くのテーブルを作成できることを知っています。
複数のサーバーでこれをどのように行うことができますか?これにより、Mysqlをスケーリングできます。
Xサーバー上にXテーブルを作成しますか?
誰かが説明したり、複数のサーバー間でパーティションを作成する方法を教える優れた初心者向けチュートリアル(ステップバイステップ)を持っている人はいますか?
水平分割...多くのテーブルを作成できることを知っています。
複数のサーバーでこれをどのように行うことができますか?これにより、Mysqlをスケーリングできます。
Xサーバー上にXテーブルを作成しますか?
誰かが説明したり、複数のサーバー間でパーティションを作成する方法を教える優れた初心者向けチュートリアル(ステップバイステップ)を持っている人はいますか?
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 |
-------------------
次に、サーバーに対する読み取りと書き込みを構築します。あまりきれいではありませんが、うまくいきます。次の障害は、よりフォールト トレラントにすることです。したがって、たとえば、server1
、server2
およびserver3
それぞれが小さなクラスターである必要があります。
最後になりましたが、サーバー間でデータとインデックスを分割するもう 1 つの興味深いアプローチは、Digg のIDDBです。彼らがそのコードをリリースしたかどうかはわかりませんが、彼らのブログ投稿には、その機能に関する詳細が記載されています。
これが役立つかどうか教えてください!
ただし、何らかの理由でこのソリューションをクラウドに移行してマルチテナントにしたい場合、上記の構成はより困難になる可能性があることに注意する必要があります。これについて考えます -
したがって、問題は、通常、スレーブが読み取り用でマスターが書き込み用である mster-slave のような env で、このシャーディングをどのように行うことができるかを考える必要があるということです。
乾杯 !ゲイリー
HSCALE 0.1 の発表時に書かれている内容は次のとおりです。
現時点では巨大なテーブルを分割するだけで済みますが、後でパーティションを複数の MySQL サーバー インスタンスに分散させて、実際に水平方向にスケールアウトしたいと考えています。最も困難な部分は、分散トランザクション (XA) を使用するか、異なるホスト上のパーティションを含むトランザクションを許可しないトランザクションを処理することです...
このプロジェクトを見てください: http://sourceforge.net/projects/hscale/おそらくあなたに適しているでしょう。