这个问题没有你想象的那么简单,因为不管你最终怎么分,核心问题是分表之间的数据无法很好地整合成一个数据结果集,比如你对user表进行取模分表,如何实现搜索所有大于10岁的用户这种简单的操作?而且外键关系也会完全打乱,其他表里的user_id到底对应的是哪个user表里的id?
从项目定位上,doctrine2的dbal提供了一些简单的sharding功能,但使用起来有很多的限制,你可以查看一下http://doctrine-orm.readthedocs.org/projects/doctrine-dbal/en/latest/reference/sharding.html
当然,如果你觉得这些限制对你来说很重要,你不想失去,那就必须按照你的特定的需求去实现一套你自己的dbal,orm的相关部分也需要改,但是这个工作量就大了,能展开的部分太多,而且和业务结合比较紧密,在此先不做展开。
除此之外,我建议你考虑使用一些mysql proxy软件去实现这个功能,这些软件模拟了mysql的协议,对外提供一个标准的mysql服务,对内可以连接几个分表的真实mysql数据库。在操作起来和使用一个mysql数据库没有区别,但实际上却是由mysql proxy在操作多个不同的数据库。这种东西应该是比较适合你的,但也有很多限制,你可以参考各自的文档。