0

サーバー時間が 1 ~ 30 秒の場合は 1 つのテーブルに接続し、31 ~ 60 秒を超える場合は別のテーブルに接続します。

これが必要な理由は、よくわからないためですが、10,000 人が単一の mysql テーブルにアクセスしている場合、劇的に遅くなります。

私のコードは以下です

 <?php
    header('Content-type: application/json');

    $server = "localhost";
    $username = "root1";
    $password = "root1";
    $database = "test";

    $con = mysql_connect($server, $username, $password) or die ("Could not connect: " .  mysql_error());
    mysql_select_db($database, $con);

    $sql = "SELECT id, name FROM post ORDER BY id";
    $result = mysql_query($sql) or die ("Query error: " . mysql_error());

    $records = array();

    while($row = mysql_fetch_assoc($result)) {
        $records[] = $row;
    }

    mysql_close($con);

    echo $_GET['jsoncallback'] . '(' . json_encode($records) . ');';
    ?>
4

3 に答える 3

1

アプリケーション コード レベルで負荷分散を行わないことをお勧めします。異なるテーブル間で負荷を分散する必要がある場合は、データベース レベルできれいに処理できるように、パーティショニングと負荷分散された mysql クラスターの設定を検討する必要があります。ここにあなたをさらに導くためのいくつかのリンクがあります:

于 2013-05-14T19:58:56.980 に答える
1

私が完全に理解しているかどうかはわかりませんが、php の time() は Unix エポックからの秒数を返します。偶数の場合は 1 つのテーブルに接続し、それ以外の場合は別のテーブルに接続します...これにより、トラフィックが効果的に分割されます...

  <?php
    $time = time();
    $tableToAccess = ($time % 2 == 0) ? 'table_one' : 'table_two';

    $db = new mysqli('localhost','username','password','database');

    $result = $db->query("SELECT * FROM $tableToAccess");

  ?>

そうは言っても、同時テーブルアクセスではなく、複数のユーザーによって実行されているデータベースエンジンが速度を低下させるものです

于 2013-05-14T19:55:41.817 に答える
0

オプションの 1 つとして接続タイムアウトを設定できます。参照: http://php.net/manual/en/mysqli.options.php

于 2013-05-14T19:57:42.880 に答える