2013-05-14 28 views
0

如果服务器时间在1-30秒之间连接到一个表,并且如果超过31-60秒连接到另一个表。根据时间连接到mysql表

之所以我需要这是因为我不知道,但如果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) . ');'; 
    ?> 
+0

作为Gaurish夏尔马在他的回答中指出,这是*数据库*的工作,而不是你。你有效地试图实现负载平衡 - 但不是真的。真正的数据库负载平衡适用于群集和复制。数据库还负责确保其他数据库中的数据相同。 将请求重定向到一个*不同*表不会减少数据库的整体负载吗?问题依然存在。 –

回答

1

不知道我完全理解,但PHP的时间()将返回秒自Unix纪元。如果它的偶数,它连接到一个表,否则另一个表...这将有效地分流交通......

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

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

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

    ?> 

话虽这么说,该数据库引擎由多个用户运行的是什么会让你放慢向下而不是同时访问表

+0

这个问题很好的解决方案:) – rinchik

+0

@rinchik,除了这是一个糟糕的解决方案,因为OP不应该试图通过这种方式来平衡负载。 –

+0

@ Moo-Juice哦,你是对的。这里的问题更深入,但我认为这是一个很好的答案,“根据时间连接到mysql表”的问题。也可以使用rand(0,1) – rinchik

1

我建议不要在应用程序代码级别进行负载平衡。如果你需要在不同的表中分配负载,你应该考虑设置一个负载均衡的mysql集群的分区,所以这可以在数据库级别上干净地处理。这里有几个环节,以进一步引导你: