On Jun 24, 2009, at 02:49 , keith Pope wrote:

2009/6/24 wadearnold <[email protected]>:

I'm looking for a sanity check for my ZF connection to a mysql master/slave architecture. My Db configuration is MySQL Master and three slaves. The three slaves are behind a load balancer with linux hearbeat so to php the
slaves are a single connection. To date I have been using two Zend_Db
connections and then remembering in my code were to read and write:

// using mysqli adapter
$master_db = Zend_Db::factory(...);
$slave_db = Zend_Db::factory(...);

$master_db->insert(...);
$master_db->beginTransaction();
$master_db->update(...);

$slave_db->fetchAll(...)
$slave_db->select(...)


I have seen other frameworks abstract the first part of the sql statement and find the proper db pool. I am not sure if this is worthwhile and seems like a lot of work for PHP. There is not an equivalent in the Zend Framework
correct?
http://solarphp.com/class/Solar_Sql_Adapter_MysqlReplicated

I am starting a large application and don't want to come begging back to the list when it does not work. Does my implementation seem sufficient? Links to
best practices would be great!

I would suggest doctrine, its far more mature than Zend_Db and has
support for what you are looking for

[FULL DISCLOSURE: I am the lead developer and architect of Solar, and was the initial developer of Zend_Db and Zend_Db_Table way back at the beginning.]

Per this Doctrine page ...

  
http://www.doctrine-project.org/documentation/cookbook/1_1/en/master-and-slave-connections

... it looks like there is no functional difference from the Zend_Db approach outlined above. That is, you should create multiple connections, and pick manually which one you want to use. The Doctrine example instructs you to do that in extended classes, which I guess Zend_Db is also capable of.

<selfpromotion>

This is as opposed to Solar's MysqlReplicated adapter, the SVN trunk version of which works automatically. Yes, it examines the first few characters of the SQL statement to determine whether it should pick a master or a slave, which is not exactly a big performance drain. It also manages GET-after-POST situations, so that if you insert or update on one request, the very next request *also* uses the master (even for reads), to allow time for data propagation to slaves. Finally, you can switch back and forth between replicated and non- replicated environments without changing your application code.

See more here:

  http://solarphp.com/blog/read/19-adapter-for-master-slave-my-sql-setups

</selfpromotion>


plus doctrine 2.0 (not released yet though) should have good support for domain modeling...

Ah, the joys of unreleased software; it will do everything, just not yet. ;-)



--

Paul M. Jones
http://paul-m-jones.com/




Reply via email to