したがって、マスター/スレーブ データベースの設計では、セッション関連のすべてのテーブルを特別に扱う必要があると思います。つまり、すべてのセッション データ テーブルを更新およびクエリできます。ユーザーがサイトにアクセスすると、ユーザーは指定されたデータベースにバインドされ、すべてのセッション アクセスおよびクエリ操作がこのデータベース上で実行されます。セッション テーブルは同期されず、他の非セッション更新もメイン データベースから更新されます。実際、これではセッション更新時のデータベース切り替えを避けることができないため、面倒な場合はセッションをテキストで保存することをお勧めします。
分割データベース設計により、パフォーマンスが数段階向上する可能性があります。もちろん、1 回の実行の効率は単一データベースの効率よりも高くはなりません。結局のところ、データベースの切り替えには効率の問題があります。サブデータベースとマスター/スレーブ データベースの組み合わせは、データベースの同時実行性のボトルネックを改善するためのより良いソリューションです。原則: 大規模なデータ量、大規模なアクセス量、マスターとスレーブ。多くの場合、この 2 つは並行して動作します (この記事ではキャッシュについては説明しません)。
サブデータベースやマスター・スレーブ関係を実装したい場合、アプリケーション内で任意のタイミングでデータベースサーバーの数を切り替えるのは、非常に頭の痛い問題になると思います。 、たくさんあるでしょう?より良い解決策を見つける方法がこの記事のテーマです。
一つ目は、サブデータベースによる多くのデータベースの問題です。どのような状況でデータベースが分岐するのでしょうか?なぜデータベースを分割する必要があるのかまだ理解できない人もいるかもしれないので、私の経験と推測について簡単に話します。たとえば、ブログ プログラムは通常、ログ テーブルにログを保存するように設計されています。マルチユーザーブログであればuidを紐付けることになりますが、データ量が多くない場合はこの設計でも問題ありませんが、ログ量が膨大になると数十万件のログが入力されます。アクセス数もかなり多くなると、すべてのユーザーがログ リストにアクセスして、数千万件のログ レコードを含むデータ テーブルからいくつかのエントリを見つけることは不可能だと思います。明らかです。現時点では、サブライブラリの問題を考慮する必要があります。分割方法は?非常に単純なテーブル分割方法があります。つまり、uid セグメントに従って各データベースにログを記録します。もちろん、ユーザー ログの分布は明らかに均一ではないため、この分布は過去の統計結果に基づいて調整する必要があります。 uid セグメントを設定し、uid に基づいて指定されたデータベース構成にインデックスを作成し、データベース オブジェクトを作成します。構成情報は次のとおりです:
コードをコピー コードは次のとおりです:
$configs['db_info']['blog'][0] = array(
'db_host' => '192.168.0.1',
'db_name' => 'ブログ',
'db_pass' => ',
$configs['db_info'] 'ブログ'][1 ] = array(
'db_host' => '192.168.0.2',
'db_name' => 'ブログ',
'db_user' => 'root',
'db_pass' = > '',
);
$configs['db_info']['blog'][2] = array(
'db_host' => '192.168.0.2',
'db_name' => 'ブログ' ,
'db_user' = > 'root',
'db_pass' => '',
//...他にもたくさんあります
どのサーバーを選択するかについては、次のことを行うだけです。 uid に基づく単純な一致。
次に話すのはマスタースレーブデータベースです。マスター/スレーブ データベースをいつ使用するか?たとえば、有名人のブログには大量のアクセスがあり、そのデータを分割する方法がありません。現時点では、マスター/スレーブ データベース サーバーを考慮し、複数のデータベースを使用してトラフィックを分割する必要があります。これをマスター/スレーブおよびサブデータベースに適用するには、上記の構成情報を若干変更する必要がある場合があります。
コードをコピーします
コードは次のとおりです:
$configs['db_info']['blog'][0]['master'] = array(
'db_host' => '192.168.0.1',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][0]['slave'][0] = array(
'db_host' => '192.168.0.2',
'db_name' => 'blog' 、
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][0]['slave'][1] = array(
'db_host' => '192.168.0.3',
'db_name' => 'blog' 、
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][1]['master'] = array(
'db_host' => '192.168.0.4',
'db_name' => 'ブログ',
' db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][1]['slave'][0] = array(
'db_host' => '192.168.0.5',
'db_name' => 'blog' 、
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][1]['slave'][1] = array(
'db_host' => '192.168.0.6',
'db_name' => 'blog' 、
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['session'][0]['master'] = array(
'db_host' => '192.168.0.7',
'db_name' => 'セッション',
' db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['session'][1]['master'] = array(
'db_host' => '192.168.0.8',
'db_name' => 'セッション',
' db_user' => 'root',
'db_pass' => '',
);
ここに書きます、我想都应该知道 どのように分割して割り当てられたデータ库了吧、次下去我就来轻松の读取この配置情報、どのようにこれらの配置がこれらの配置を企業のデータベース管理に組み込むか。
http://www.bkjia.com/PHPjc/319320.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/319320.html技術記事つまり、すべてのセッション データ テーブルは、ユーザーがステーション ポイントにアクセスするときに更新および確認できるようになります...