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/