先描述下现有系统:现有系统的设计要求是每日订单量为30W,所以对数据表必须要拆分来提高读写效率,当更加得益于Ali牛逼的TDDL数据库中间件和面目全非的MySQL。
分布式数据库介绍
http://www.iteye.com/news/32077
拆分的原则
- 分表的规则,需要使用贯穿整个业务主线的ID,如订单号等。
- 分表ID需要贯穿整个业务的主线,如何订单相关的表,如果订单在第0张表,则相关表也都在第0张表
*100保证
public long generateSellOrderId(long orderId){
long temp = sequence.nextValue();
return temp*100+TddlRouteUtil.getTableIndexByOrderId(orderId);
}
基础知识
表的拆分需要根据一定的规则,如拆分为64张表,业务ID为100,则ID为100的数据存入100%64=36 第36张表中。
表连接查询?
这个想都不要想了,想象一下查询所有的表来实现条件查询会有多么的恐怖!
1)代码逻辑中的操作所有的都是单表操作,业务逻辑在数据查询出来后处理。
2)如果我想使用其它的非分表规则属性(意味着我不知道到哪张表中查询数据),则需要依靠建立外部索引,如aliyun 的OpenSearch服务等。