Symfony + Doctrine + MySQL Replication

September 11, 2009 – 1:57 am

网站架构加入mysql读写分离,是流行的做法。下面记录一下如何如何让采用symfony框架的产品加入mysql读写分离,我们使用doctrine实现数据操作。

在database.yml里输入:

  1. all:
  2.   master:
  3.     class: sfDoctrineDatabase
  4.     param:
  5.     dsn: 'mysql:host=localhost;dbname=mydb'
  6.     username: master
  7.     password: master
  8.     option: charset=utf8
  9.   slave:
  10.     class: sfDoctrineDatabase
  11.     param:
  12.     dsn: 'mysql:host=localhost;dbname=mydb'
  13.     username: slave
  14.     password: slave
  15.     option: charset=utf8

master和slave的前后顺序取决于你的具体需求,doctrine数据模型默认读取最后一个,由于一般网站大部分操作都是读操作,所以我们把slave写在后面了。

具体数据操作代码如下:

  1. //插入
  2. $add = new Tblusers();
  3. $add->username = "username";
  4. $add->password = "passwd";
  5. $add->save(Doctrine_Manager::getInstance()->getConnection('master'));
  6. //编辑
  7. $query = Doctrine_Query::create(Doctrine_Manager::getInstance()->getConnection('master'))
  8. ->update('Tblusers a')
  9. ->set('a.username = ?',"username")
  10. ->where('a.uid = ?',2)
  11. ->execute();
  12. //显示
  13. $rs = Doctrine_Query::create()
  14. ->from('Tblusers a')
  15. ->where('a.username = ?',"username")
  16. ->fetchArray();
  17. //删除
  18. $del = Doctrine_Query::create(Doctrine_Manager::getInstance()->getConnection('master'))
  19. ->delete()
  20. ->from('Tblusers a')
  21. ->where('a.username = ?',"username")
  22. ->execute();

除此以外,Doctrine官方网站上的cookbook还介绍了通过添加自定义类(继承自Doctrine_Query)来实现。

Post a Comment