跨系统数据同步工具实战经验总结

zhongdaiqi · 2016-08-15 02:59 · 8 次阅读
Uncategorized

image

多个系统间的数据同步是比较常见的,也是可以抽象为通用的场景。以推为例,向外输出数据的时候,可以描述为以下几个点:

1.DataSync的重用

2.有单表、主从表之分。

3.数据不要重复推。

4.单次推送容量控制

针对性的解决方案:

一、DataSync重用

DataSync重用的解决是通过启动传参+配置文件+Sql模板+TableToJson的形式来解决。启动的时候要求指定所使用的配置文件即要启动传参,比如 DataSync Order2OMS,这样子不同的业务场景下,可使用相应的配置运行。而配置文件再指定了取数sql,防重key值,目标URL,数据模板,基本上可以应对大多数业务数据推送。看配置文件:

image

SqlTemplate:通过sql取数,非常灵活!可以通过sql关键词as,做字段名的转化。

KeyName:指定了用于防重的数据戳

KeyValue:记录了当前最大的数据戳,下次推送就不会重复推了。取数的时候,模板中的{KeyValue}会被替换成实际值。

TargetUrl:数据接取的服务URL,这里可以配置Get参数,可能大多数会使用Post参数,所以这里看不到Get参数

PostDataTemplate:这个定义了数据传输模板,可依据对方接收的不同,定制参数。

NextAction:这个东东有点链式执行的方式,取值为配置文件名,当前推送执行完之后,会执行这个NextAction.这个主要用于解决主从表推送,后续会讲到。

二、单表、主从表

单表、主从表都拉平为单表的目的在于,便于将推送的数据映射到目标DB中,也减少推送方组装业务实体。以下看看怎么拉平处理。

单表,可直接序列化为JSON串,借助开源的JSON类库,可以非常方便的达到此目的。JsonConvert.SerializeObject(dt, new DataTableConverter());

主从表,则依据单表组合而来,为了保持推送模型的简单与统一,对外输出均以单表形式输出。主表先推,从表随后。通过设计一个下一跳动作满足主从表的数据约束。

因此,解决主从表,则从“下一跳”的推送机制来下手,从配置文件来看这种设计:

image

请关注这个配置中的NextAction,这个指明了,紧接着所需要做的动作。

三、数据防重推

防止重推,增加了一个key值,这个相当于数据戳,前面有介绍到。这里要补充到的是,KeyValue并没有限定取值类型,执行的时候会用于替换Sql模板中的{KeyValue}。一般建议使用自增id,其他类型的也可以试试,只要排序是稳定的。Order主表使用Order_id,明细表使用Order_detail_id,在实际配置的时候,Order推送配置的Naction是OrderDetail,OrderDetail推送配置KeyName应该是Order_Id还是Order_detail_id呢?

四、单次推送容量控制

与top的使用,别一次把整个表给拖出来,搞不好会卡死。

上面讲了推送,下面讲一下接收。接收的话,基于推送拉平成了单表推送,因此可以简单粗暴的映射到持久层。如果不是直接落地,还要向后推,则可以入库后,也配置一个DataSync。

JSON配置尝试,简单的序列化即可以生成好持久化配置文件,感觉非常棒。但是JSON形式的配置有一个尴尬的转义,提示的错误比较古怪。整体来讲,还是不错的。

总结:

NaxtAction的实现方式比较巧妙。目前并没有实际使用。JSON用于配置、推送数据都比较给力。

评论

还没有评论,登录后来说两句。