循环连接到mysql

时间:2010-10-01 13:30:02

标签: php mysql

我想在我的应用程序中将余额查询加载到2个mysql服务器。

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

我正在考虑使用一个全局计数器,每次建立连接时都会递增,使用我的数据库服务器修改计数器以获取我应该连接的主机。然而,上述过程需要是原子的,因此没有2个请求看到相同的计数器。

我应该怎么做?使用信号量锁,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)]

由于

2 个答案:

答案 0 :(得分:2)

最好的方法?

使用MySQL Proxy ...它会自动补偿关闭服务器。另外,您可以编写规则来说明每个查询的位置(循环选择,或者指定特定服务器以获得更好的缓存关联)。另外,它可以自动将所有写入指向主服务器......

我不会尝试在您的应用程序中实现它。原因是在多个实例中处理全局锁定要困难得多,并且更难以进行故障检测而不会导致大的性能损失......

答案 1 :(得分:0)

为什么不采用rand方式?

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

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