大致说下业务场景, 在提倡云服务化的今天,我们拥有了一大堆的客户数据,同时我们也拥有了一大堆的rds。当这么多的rds存在时,数据统计有时就变得很麻烦,再也不能使用一条sql来统计双十一我们客户究竟卖了多少订单,我们客户在淘宝和天猫订单的比例等等。
在数据分析和数据统计的需求越来越多时,数据仓库的作用就显得非常重要。而不想花太多成本搭建数据仓库,又不想投入很多开发资源的情况下,dataworks作为一个集成了数据仓库和数据分析的工具,也是一个不错的选择。
dataworks从v1.0开始使用到现在v2.0。在下每天维护着超过200个数据库每个库20+核心表的数据同步,在产品的数据需求和大量的同步任务压迫下苟延残喘。
数据分析这块熟悉了sql后基本没什么好说的,对于维护数据库不多的同学,同步任务貌似也没什么太大的问题。当数据库达到100+,每天建同步任务建到吐血的同学,我们可以分享下当前的经验以及策略。顺便也恐惧下数据库达到1千后,我们该怎么办,或者坐等阿里的同学给出更合适的同步方案吧。
一图抵万语:
这是我使用的同步策略,将不同rds的同一个表统一的放入odps的同一个表中,用分区参数对应rds名的方式来存放。
优点
- 计算很方便,100个rds的tableA都在同一个表里,sql很简单。
- 节约计算成本,比如要取某rds的数据只需在条件中加入pt=rds名来过滤即可。
缺点
- 同步任务很多,需要维护N(rds数)*T(表数)个同步任务,加上有些可以做增量的同步任务,将会有更多的同步任务。
基于上述的策略,受限于资源(不能在有限的时间里把全库数据同步完),同步任务太多(手工没法建这么多同步任务啊T,T), 产品需求急(急nm啊),我维护了两套同步方案。
继续上图:
方案A:
应用场景
产品急需对某rds的数据做出数据产品。此产品涉及的表比较多,但不涉及所有rds,数据只在某几个rds里面。
方案B:
应用场景
老板、市场、产品想了解公司目前经营现状,涉及的表比较少,但是需要全表。
难点
当数据库超过50个时,人力简直要泪奔。可以建同步任务建到精神恍惚。
写于最后:
分库分表数据库数量多的同学一起交流交流。分享下各自的思路。我现在的解决方案是通过selenium写网页自动化脚本来自动建同步任务T,T.