myslq分表分库方案,请大家指正,多谢先!
项目背景:
最近写了一个小程序,对订单数据处理,写入/读取次次差不多,近2月约为30W条数据(mysql存储),且在近一步快速增长中。心里很是紧张,如果超过100W了会如何?
解决问题:数据记录多时读取速度。
在网上搜索了Mysql的分表分库方案,主要有mysql proxy,Amoeba,HiveDB等。大概比较了一番,好象都不能完全达到我的理想要求:
R1.数据库、数据表可以无限增加
R2.增加时进无需要迁移数据,或者简略简单。
R3.可以人工分配
R4.解决日期分段提历史数据查询问题,并可与主库分离(一个业务库对一个历史库2-3年数据,更早期数据归档,用户不能查询)
R5.解决主从数据库的访问,或者单点故障。
可配置,尽量不修改现在的程序。
解决办法:
为每人用户分配一个数据分区标志,终身不变以此定位数据。如user1(分区标志3)则交易数据存存在tblxx_3,历史数据存储在tblxx_3_yyyymm中,tbl_xx是开发测试时使用,也是一个真实的分表。
配置文件定义:
1. tblxx 可被替换
2. 分区标志3的数据库位置信息{3,},实际如下(php代码)
$shard['dbservers']=array('master'=>array( array('1,3,70','localhost', 'eprinter', 'root', 'root', 'mysql'), array('2,4,50','localhost', 'eprinter2', 'root', 'root', 'mysql') ),'slave'=>array( array('1,3,5','localhost', 'eprinter', 'root', 'root', 'mysql'), array('2,4,50','localhost', 'eprinter2', 'root', 'root', 'mysql') ),'history'=>array( array('1,3,5','localhost', 'eprinter', 'root', 'root', 'mysql'), array('2,4,50','localhost', 'eprinter2', 'root', 'root', 'mysql') ));
2、根据用户分页批量查询:冗余订单数据,根据用户分表,为每个订单参与者都复制一份数据,在每个订单数据表中,增加一个字段,以指定该份数据是哪个参与者的,查询时,加上标志用户参数。
用户分表:和订单一样,也需要详细设计用户编号,不再详述;
3、用户指定分库分表:按照上面的分库分表,可以大用户和小用户初分在同一个表中,查询时还是有性能问题,这个时候,需要手动指定分库分表规则(即该用户的分库和分库编号)。如果某个用户指定了规则,则使用指定的规则,否则按上面的默认规则存储!
希望对你有怕帮助!
[解决办法]
标题中貌似有拼写错误...
[解决办法]
标题中貌似有拼写错误...
[解决办法]
按照时间段,设定一个固定时间段到时就将数据库备份然后再重新建一个数据库。以后查询的时候按照日期到相应的数据库的查询,只是日期跨度太查询起来就比较麻烦了。这个估计应该还是能够解决。
[解决办法]
能完全满足楼主的要求,有点难实现
[解决办法]
好東西.有沒有MsSql的分區價紹呢
[解决办法]
接触MySQL proxy,做起几万条数据的操作感觉很好,推荐用代理,或许本人对代理情有独钟。
[解决办法]
我们搞过上亿数据在一个表,仍然很快呀,每秒几百条新记录插入。
[解决办法]
建议先压力测试看看能不能满足需要
[解决办法]
如果有“交并集”或汇总操作怎么处理呢
[解决办法]
分真多。
[解决办法]
非常不錯。。。。。學習了!
[解决办法]
可以考虑多分点表,加点索引,没事的。