sql >> データベース >  >> RDS >> Mysql

複数のサーバー間でMysqlを分割する方法は?

    MySQLを使用すると、一般に、アプリケーションベースのシャーディングと呼ばれるものを実行します。

    一言で言えば、同じデータベースの構造があります 複数のデータベースサーバー上。ただし、同じデータは含まれません。

    たとえば:

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

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

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

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

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

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

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

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

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



    1. 2つの日付の間のすべての日付を一覧表示する方法

    2. 日付のPDO::PARAM?

    3. JetShowPlan:入門書

    4. テーブルに影響を与えたSQLをログに記録するトリガーを作成しますか?