laravel怎么分表分库?
分库干啥?
一般一个项目就连接一个数据库啊,一个库里放上百十张表都没问题的?在config都设置了,反正我是没用过分库,你可以在百度查查。
如果是用MySQL做DB,可以用ENGINE=MRG_MyISAM 实现水平分表,原理和实例,自行Google一下。
核心点:
1、合并表(负责查询,不存数据,ENGINE=MRG_MyISAM)、子表(负责增/删/改,ENGINE=MyISAM)
2、除引擎类型外,表结构需要完全一致
3、子表的主键必须全局唯一,利用合并表的查询结果,主键不能出现重复的。比如:通过php自带uniqid函数,封装一个方法是个选择
拿posts表举例,两个字段:id,title
合并表: posts
子表按季度分:
posts_201501
posts_201502
posts_201503
posts_201504
...
插入数据的时候,判断当前时间决定插入哪张表,比如现在,则插入post_201501表
取数据的时候,和Eloquent平常用法一致,省了很多分表带来的处理逻辑代码
其他
1、migrations里面,自己写个合并表和子表的构造程序即可
2、这种水平分表,对原代码的改动比较小,不用处理复杂的跨表查询逻辑,所以觉得还挺方便的
3、MyISAM不支持事务,但查询方面强于InnoDB,这种做法比较适合分拆查询业务,数据过大的表
4、没在实践项目中用过,仅参考,Have fun~