Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 循环连接到mysql_Php_Mysql - Fatal编程技术网

Php 循环连接到mysql

Php 循环连接到mysql,php,mysql,Php,Mysql,我想在我的应用程序中,对2台mysql服务器进行负载平衡查询 最好的方法是什么,以便每个查询都转到不同的db服务器 我正在考虑在每次连接时增加一个全局计数器,用我的db服务器修改计数器以获得我应该连接的主机。但是,上面的过程需要是原子的,以便没有两个请求看到相同的计数器 我该怎么做呢?使用信号量锁,mysql的get_lock() 伪码 counter = 0 hosts = array('192.168.1.1:3306', '192.168.1.2:3306') //the below c

我想在我的应用程序中,对2台mysql服务器进行负载平衡查询

最好的方法是什么,以便每个查询都转到不同的db服务器

我正在考虑在每次连接时增加一个全局计数器,用我的db服务器修改计数器以获得我应该连接的主机。但是,上面的过程需要是原子的,以便没有两个请求看到相同的计数器

我该怎么做呢?使用信号量锁,mysql的get_lock()

伪码

counter = 0
hosts = array('192.168.1.1:3306', '192.168.1.2:3306')

//the below code needs to be atomic
GET A GLOBAL LOCK
counter = counter+1
RELEASE THE LOCK

host = hosts[counter % len(hosts)]
谢谢

最好的方法是什么

使用。。。它将自动补偿停机的服务器。此外,您还可以编写规则,说明每个查询的位置(可以是循环选择,也可以是特定的服务器,以获得更好的缓存亲和力)。另外,它可以自动将所有写入操作定向到主服务器


我不会尝试在您的应用程序中实现它。原因是,跨多个实例处理全局锁要困难得多,而且故障检测也很难不造成很大的性能损失……

为什么不采用rand方法呢

$this->read_host = $this->prod_slaves_array[rand(0,(count($this->prod_slaves_array)-1))];

优点是它是无锁的,虽然它不是完全50/50,但它真的需要吗?

如果我是对的,Hi Mysql Proxy仍然是beta版。不管怎样,我需要它在应用程序逻辑中,技术上它是alpha。为什么在应用程序逻辑中需要它?使用代理不会对您有什么影响?这是为了测试目的。还有HaProxy可以完成这项工作,但现在我只想在应用程序logicWell中测试它,正如我所说,它将涉及处理所有边缘案例。我个人会使用一个锁文件(使用)来控制计数器(锁定它,读取并递增计数器,写入递增的数字,释放锁)。但请注意,这可能是危险的,因为它是应用程序的瓶颈。。。为什么它是原子的如此重要?谁在乎两个连续进程是否命中同一个db服务器?只要平均情况是50对50,这真的重要吗?