分库分表上百后Dataworks同步策略分享

大体说下业务场景, 在提倡云服务化的今天,咱们拥有了一大堆的客户数据,同时咱们也拥有了一大堆的rds。当这么多的rds存在时,数据统计有时就变得很麻烦,不再能使用一条sql来统计双十一咱们客户究竟卖了多少订单,咱们客户在淘宝和天猫订单的比例等等。sql

在数据分析和数据统计的需求愈来愈多时,数据仓库的做用就显得很是重要。而不想花太多成本搭建数据仓库,又不想投入不少开发资源的状况下,dataworks做为一个集成了数据仓库和数据分析的工具,也是一个不错的选择。数据库

dataworks从v1.0开始使用到如今v2.0。在下天天维护着超过200个数据库每一个库20+核心表的数据同步,在产品的数据需求和大量的同步任务压迫下苟延残喘。markdown

数据分析这块熟悉了sql后基本没什么好说的,对于维护数据库很少的同窗,同步任务貌似也没什么太大的问题。当数据库达到100+,天天建同步任务建到吐血的同窗,咱们能够分享下当前的经验以及策略。顺便也恐惧下数据库达到1千后,咱们该怎么办,或者坐等阿里的同窗给出更合适的同步方案吧。工具

一图抵万语:
1542362577573blog

这是我使用的同步策略,将不一样rds的同一个表统一的放入odps的同一个表中,用分区参数对应rds名的方式来存放。资源

优势

  • 计算很方便,100个rds的tableA都在同一个表里,sql很简单。
  • 节约计算成本,好比要取某rds的数据只需在条件中加入pt=rds名来过滤便可。

缺点

  • 同步任务不少,须要维护N(rds数)*T(表数)个同步任务,加上有些能够作增量的同步任务,将会有更多的同步任务。

基于上述的策略,受限于资源(不能在有限的时间里把全库数据同步完),同步任务太多(手工无法建这么多同步任务啊T,T), 产品需求急(急nm啊),我维护了两套同步方案。开发

继续上图:同步

方案A:

12

应用场景

产品急需对某rds的数据作出数据产品。此产品涉及的表比较多,但不涉及全部rds,数据只在某几个rds里面。数据分析

方案B:

0D1E78B6_5513_48E5_A14D_05A8F1B71047

应用场景

老板、市场、产品想了解公司目前经营现状,涉及的表比较少,可是须要全表。selenium

难点

当数据库超过50个时,人力简直要泪奔。能够建同步任务建到精神恍惚。

写于最后:分库分表数据库数量多的同窗一块儿交流交流。分享下各自的思路。我如今的解决方案是经过selenium写网页自动化脚原本自动建同步任务T,T.