全文共计1800字,预计阅读时间: 5 分钟

良人一句三冬暖,伤人一语六月寒!

前言

介绍财务进销存系统框架时,一直在说财务数据需要进行分层,从基础数据到计算层,再到财务数据层,最后是展现层,每层间都要进行数据核对,保证财务数据的准确性、完整性等特性。对于基础数据主要包括商品、供应商与合同,这些数据来源于业务系统,但业务系统是变化的,如何获取这些数据是电商财务系统设计时必然要考虑的。这里简单分享下数据获取三种方式:数据复制、主动拉取、业务系统推送

数据复制

数据复制是就是将数据库从一个节点实时同步到另一个节点,目前在数据库架构中的读写分离都是采用的这种技术,下图是一个MySql数据库复制的示意图。


电商财务系统的基础数据来源于不同的业务系统,这些基础数据涉及的数据存储表会很多,如商品信息表、商品属性表、商品分类表、供应商信息表、合同表、补充协议表等。一般的电商企业中经营的SKU商品有几万或几十万,大型的平台会达到百万,供应商及合同等信息数据量都不会很大,采用数据复制的方式是一种比较简单的方法。数据复制的优点:(1)可以保证业务库与财务库的数据是实时同步的,延迟非常小。(2)技术成熟,部署简单,只需明确要同步的数据表,不需要开发单独写服务代码。数据复制的缺点:(1)它只能整个表的数据进行复制,而且不能进行表字段的选择,这对于财务基础信息库可能会产生一部分不需要的数据信息。(2)复制的数据与业务库始终一致,如果要固化需要单独做映射。(3)受复制程序影响较大,一旦复制出问题,短时间会造成数据丢失。

主动拉取

主动拉取就是由电商财务系统根据业务数据的需要,通过程序代码从业务库实时或定时的抽取数据。


此种方式是个人推荐的,上图是一个简单的示意图,在电商企业中的各个数据库都是独立布署的,访问是需要授权的。对于这种批量的、频繁的数据拉取需求可能会影响到业务系统的正常使用,所以主动拉取分为两步:(1)根据数据需求由业务系统提供外部接口,接口会限定单次获取的数据量,访问频次等。(2)电商财务系统开发拉取服务,在数据拉取过程中要进行数据的加工处理。主动拉取的优点:(1)数据处理比较灵活,可以根据业务需要只获取有用的关键的数据信息。(2)数据拉取的时间和频率可以根据配置进行调整,而且通过接口方式获取数据,不会影响正常的业务生产。(3)拉取的数据存储后符合财务数据的准确、持久与不可变。主动拉取的缺点:(1)业务系统要针对财务需求开放出很多对外接口,会有一定的工作量。(2)拉取时的数据加工处理要考虑后续扩展,防止因业务变更加大难度。(3)对业务数据的实时变化响应慢,要确定好拉取数据的逻辑。

业务系统推送

这种方式与主动拉取相反,它是由业务系统在产生新数据或数据变化时通过调用电商财务提供的接口而完成数据同步的一种方式,此种方法对业务系统要求更高。


上图的推送服务实际上是指针对不同的业务活动进行响应的一系列服务,举个例子,当新建合同时,要将合同信息推送给电商财务库,当合同变更或终止时同样要将最新信息推送给电商财务库,这种情况虽然可以通过消息队列MQ来进行一些改善,但仍会增加业务系统的工作量,在系统设计上个人是不建议采取这种方案的。业务系统推送的优点:(1)电商财务系统只需做好数据处理,对于业务系统数据的复杂度不需要关注。(2)可以通过消息列降低耦合,减少对业务系统的影响。(3)财务数据可以根据需要进行固化处理。业务系统推送的缺点:(1)业务系统逻辑复杂,要保证数据的完整性、准确性、及时性等特点。(2)随着业务数据变化,如果扩展性不好,维护工作量较大。基础数据惯穿于电商财务系统各个模块,这些数据会新增、删除,在业务流转过程中也会有状态的变化和调整。在数据由前端业务系统同步到电商财务系统中,要满足财务数据的及时性、准确性、持久性和不变性。及时、准确在数据同步前和同步后通过数据核对平台来保证,持久性和不变性可以在月结完成后通过快照的方式进行固化,具体在系统设计时需要综合考虑。

总结

本篇的三种方法很简单,但是在具体的系统实现时要考虑很多细节,尤其对于这些数据的频繁变化的场景,要牢记财务数据的几个特性:及时、准确、持久、不可变。在数据抽取时曾使用过Spring Batch,也利用过Kafaka,也尝试过利用Kettle配置后生成Jar包调用的方式,每种技术在不同的业务场景中都适用,原则是尽可能降低系统间耦合,减少对业务系统的影响。最后感谢您的阅读!


个人微信号:发送 +vx 或 +wx

我的免费星球

公众号倔强的大萝卜

生活不易,倔强的活着;一起学习、思考、成长!

kettle 批量多表同步_财务基础数据同步的方式相关推荐

  1. postgres 把一个表的值转成另一个表的字段名_希望一个数据同步,包治百病

    小姐姐味道[ID:xjjdog] 作者:十年架构,日百亿流量经验,与你分享. 哎!这是一个脏活,而且是个高风险的活. 大多数情况下,应用架构设计不好,引入什么新存储,引入什么DDD,治标不治本,都是扯 ...

  2. 空间里相片批量导入u盘_多台电脑同步文件还在用 U 盘牵线?GoodSync 帮你一键搞定...

    最近有小伙伴提出了一个问题: 因为数码荔枝对这个问题颇有同感,所以立即提供了圆满解决的方案.在分享方法之前,先消除一些小伙伴可能对此产生的疑问. 为什么要在不同设备中备份相同文件? 我除了自己平时用的 ...

  3. datax 导入数据中文乱码_浅谈数据同步之道

    数据同步,顾名思义就是不同系统的数据进行同步处理.而业务系统所涉及的数据库同步是重中之重,虽然大部分数据库都提供了导入导出的工具,但是数据存储到各个地方,Hive.Hbase.MySQL.Oracle ...

  4. 美团外卖MySQL数据库_美团DB数据同步到数据仓库的架构与实践

    背景 在数据仓库建模中,未经任何加工处理的原始业务层数据,我们称之为ODS(Operational Data Store)数据.在互联网企业中,常见的ODS数据有业务日志数据(Log)和业务DB数据( ...

  5. 帧同步_什么是帧同步什么是状态同步

    哈喽,大家好 这节我们来讲解一下关于游戏开发经常涉及到的 帧同步和状态同步问题. 我这里已经录制为视频 ,有兴趣的可以看看~~ 知乎视频​www.zhihu.com 以下是moba第七章内容 第七章 ...

  6. 7 centos 时钟跟物理机同步_通信网中的同步技术

    同步技术的产生,跟其他技术一样,都是有原因的. 在老久之前的电路交换网络时代,因为电路交换的数据流是恒定的,因此可以很容易地从数据流中恢复出所需要的时钟信息,并保持源和宿之间的同步状态.二是整个报文的 ...

  7. mysql同步数据到另一张表_mysql:Otter跨机房数据同步(单向)

    重要说明:需要同步的表必须要有主键 主键 主键 otter是一款基于Java且免费.开源基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库的解决方案. Otter目前 ...

  8. oracle11g同步,Oracle11g三种数据同步方式-Oracle

    DataGurd: 主要备库的方式,就是数据库对数据库的备份方式,主要是解决容灾的. 流复制: 主要是利用ORACLE的归档日志,进行增量备份来实现的,不仅可以配置只复制某些表,还可以配置仅复制某些表 ...

  9. excel服务器数据同步修改,excel表格数据同步修改-关于excel不同表格(不同工作簿)之间数据同步修改......

    EXCEL表格文档如何数据同步更新 excel中让两份表格实现数据同步的具体步骤如下: 首先打开计算机,在计算机桌面找到excel软件,鼠标左键双击excel的快捷方式以打开软件.然后打开需要进行数据 ...

最新文章

  1. 那些年值得铭记的时刻
  2. linux 加载u盘、光盘、软盘 mount使用指南
  3. VXLAN和GRE的区别
  4. 前端要懂mysql_【灵魂拷问】你真的懂得Mysql的管理和使用吗?
  5. 自己做的几个小软件(数学工具和游戏),用C/C#制作,用到许多相关的C#技术细节,可以免费提供下载,感兴趣的,来看一下...
  6. 适配器模式原理及实例介绍
  7. MySQL排序查询示例
  8. 使用Nexus创建私服
  9. 我发现我的Java重拍了!
  10. python 分布式队列_〖Python〗-- Celery分布式任务队列
  11. 5 月份最热的 GitHub 项目
  12. IDEA java出现无效的源发行版 9
  13. python问题:NameError: name 'reload' is not defined
  14. python程序如何发布
  15. android 自定义心电图,Android自定义 View 练习 —— 心电图的绘制
  16. uni-app:uni.navigateTo 封装页面跳转传参
  17. 12306网站火车票抢票详细攻略(gohome抢票程序)
  18. 美联储历次加息周期及结果
  19. 快递单号查询api接口对接
  20. 【电力电子技术DC-AC】三相SPWM逆变器Simulink仿真(设置死区时间)

热门文章

  1. 代码结构中Dao,Service,Controller,Util,Model意思和划分
  2. Springboot 关于日期时间格式化处理方式总结
  3. python列表数据类型一致_python笔记--数据类型--列表
  4. mysql8.0.19解压版_MySQL8.0解压版配置步骤及具体流程
  5. StringUtils.isAlphanumeric(String)方法检查中文是通过的,需要注意。它不能用来检测字符串是否只包含英文和数字。
  6. Jmeter(一)http接口添加header和cookie
  7. mockjax MOCK.js的拦截ajax请求
  8. 【转】ASP.NET MVC生命周期介绍
  9. 演示<jsp:forward>动作元素
  10. ListView加ArrayAdapter结合android.R.layout.activity_list_item快速实现图文显示