订单表拆库、数据迁移、复杂查询支持方案

一、项目背景

        公司日订单达到百万级别,我负责的广告业务,需要针对订单进行实时处理。区分出所有由广告产生的订单,并且根据订单计算应支付给广告商的佣金。

         同时此部分订单需要入库,mysql里面的广告订单表数量已经达到10亿级别,无法支持正常的查询、统计、导出功能,所以需要进行分库分表。

 

二、拆库方案

         根据数据统计,目前先拆分成32个数据库,预计可以支持两年内的数据增长。

         数据分库中间件采用当当网的开源sharding-jdbc,之后会另开一篇文章单独介绍。

          分库中间件支持写入、订单号查询、日期查询等各种功能。

          复杂的报表和统计逻辑采用ES搜索引擎来实现。

三、数据迁移

          数据迁移使用多线程查询旧数据库,然后调用中间件单订单写入接口进行,写入QPS可以达到8000

          多线程中分页查询数据库订单,采用mysql的回表查询方式,达到最大的分页查询性能。

     SELECT a.* FROM (
           SELECT id FROM   order_detail
                 WHERE order_time>=#{startTime}
                 AND order_time<=#{endTime}
                 ORDER BY id 
           LIMIT #{pageStart},#{pageSize}
           )b 
     LEFT JOIN uws_a_order_detail a ON b.id=a.id

 

四、ES搜索引擎解决复杂业务逻辑和查询

           ES负责实时订单查询,与复杂报表统计

           数据更新分为手动全量更新索引,和实时数据更新

            实时数据更新使用mysql的binlog实现,实时监听32个数据库的binlog,然后推送到kafka。多线程消费kafka数据,写入ES。

  

转载于:https://my.oschina.net/u/2485991/blog/615837

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值