一个孤立的系统即使录入了再多的数据,其本身的作用也是有限的,只有和其他系统产生关联,互相之间进行数据对接和传输,才能发挥其真正的功能和作用。
公司的后端数据之所以存在不同的数据库上,本质是为了解耦数据,提高单个数据库的运算速度。多个子系统之间的交互,其本质就是数据传输。

参考

公众号:唧唧歪歪PM(《后端产品经理宝典》作者) http://www.woshipm.com/u/195416
系统之间的数据对接和传输,产品经理视角的万字总结 2021-01-20
http://www.woshipm.com/data-analysis/4345387.html
一个数据人的自留地
4万字全面掌握数据库, 数据仓库, 数据集市,数据湖,数据中台 2021年1月2日
https://mp.weixin.qq.com/s/nyxmiVQEjSTtR6ktHv8xFw

数据传输的场景和意义

数据传输的应用场景

  • 前端和后端本身无时不刻的数据互动;
  • 公司的各个系统之间的信息共享:比如各个系统模块之间进行数据的配合,比如订单系统的库存扣减数据要同步给备货系统进行采购;
  • 与第三方平台的对接:比如入驻亚马逊之后,店家可能自己需要管理自己的订单,这时候就要从亚马逊平台获取订单数据,也就是抓取;
  • 调用现成的公共插件:避免重复造轮子,市场上很多开放性的功能插件可以调用或接入,比如接入百度地图的API,接入微信小程序的二次开发。

    数据传输的意义

  • 不重复生产数据库,避免资源和功能的浪费;

  • 统一数据的维护或生产源头,避免数据不同步;
  • 别人家的数据,自己没办法生产;
  • 复用现成的轮子,API或SDK共享。

数据传输方式

分为:接口传输、中间件传输、message方式传输等。散开了说,比如:MQ(队列)、HTTP接口、otter、文件共享传输等,每一种又有细分的方式和适合的场景。
其他:爬取、导入。

接口

传统的问答式的传输方式,是典型的c/s交互模式。相当于一台客户机,一台服务器。
常用的http调用、java远程调用、webserivces都属于这种方式,不同的是传输协议以及报文格式的区别。
接口的作用
通过接口,可以调用成熟的第三方功能插件为我所用(一般就是API接口),也可以根据实际需求由开发写具体的接口代码解决具体场合的信息传输问题(一般所说的http接口)。
这个笼统的方案描述中包含:创建接口、请求接口、获取最新信息等。
接口必须是在数据源这边,由数据源方定义接口。
定义接口就是设定口令、数据范围、推送前的筛选、转化运算规则等。
数据转义:接收之前还是接收之后,取决于该数据获取之后是否还有其他用处,只要有可能被二次使用,最好是取原数据。
get是从服务器方请求数据,post是向服务器方传送数据。
接口交互数据可以是主动推送,也可以是请求获取。

主动推送一般是数据生产方一旦更新,则触发推送,将所需字段对应值传递过去。 请求获取就是数据需求方传递请求参数(请求参数一般是若干条件,比如:账号+密码)。数据生产方则按照协议响应,给出满足条件的数据到请求方(也就是返回参数)。 如果对时效要求高,则建议生产方主动推。比如产生一个新用户,那么就可以理解把用户的信息主动推送给运营方使用。如果是时效不高或者数据量大,则可以按一定频率主动请求,有利于系统负荷压力稳定。

如果对接的系统比较多,建议做一个公共接口,以后谁想用他们自己来对接就好了,不然就要来一个对接一次。
接口定义是开发的事情,但产品需要确定出范围:

接口定义的规则是什么?传参和返回参数是什么?重复传参时是跳过还是再次获取(一般都再获取)?必传参数是什么?是否回传接收结果给数据生产方?

确保接口获取的数据及时。除了生产数据需要及时向下游推送之外,还有基础数据的更新也需要及时给下游同步,有时要做到同时。请求的频率需要与更新的频率相协调。
同步方法是两种:触发式和定时脚本。

触发式就是一旦一个参数值满足条件则触发。 脚本式一般用在请求获取数据的时候。因为不知道数据源什么时候更新,所以一般用定时脚本执行请求任务。隔一段时间查询一次,请求的频率需要与更新的频率相协调。

接口的特点

优点:时效性强,可以触发式实时问答。容易控制权限,通过传输层协议https,加密传输的数据,使得安全性提高。通用性比较强,无论客户端是.net架构,java,python都是可以的。 缺点:服务器和客户端必须同时工作,当服务器端不可用的时候,整个数据交互是不可进行的。当传输数据量比较大的时候,严重占用网络带宽,可能导致连接超时。使得在数据量交互的时候,服务变的很不可靠。

相关概念扩展

API:即“应用程序编程接口”,是一些预先定义的函数,无需访问源码或理解内部工作机制的细节,即可调用的对象。比如和Windows系统沟通,需要调用Windows提供的API。和新浪微博进行沟通,需要调用新浪微博提供的API。其实它就是一个软件系统对其他软件系统提供的服务。 open api:是指对外开发的接口,比如百度地图API、facebook的API等。 SDK(“软体开发工具包”):可以理解为API的集合,也就是封装后的API。 http接口:是基于接口的传输方式(HTTP协议)来命名的,当然也有基于其他协议传输的接口。

数据库对库同步

接口完成的是信息的传输,相对来说比较保守,易于保护敏感信息。而数据库同步实际就是表对表的共享,相对接口就开放的多。
数据库同步有几种办法:
1)使用中间表
将数据放进一个中间表中,A、B两个系统都对这个表有访问权
2)直接调取对方数据表
比较省事,但是耦合性较大,数据量大的时候不建议。
3)同步对方的数据表
直接将对方的数据表copy一份过来,并保持实时同步,otter技术就是常用的一个方法。
可以将mysql的数据同步至另外mysql或者oracle,也支持双向同步(即A库同步给B库,B库也同步给A库)、文件同步等,主要应用应用是多数据中心、BI系统抽取数据、灾备。

文件包共享方式

一些第三方公司为了保密,不愿意提供接口,那么会把文件存在类似网盘或网页上,供需求方下载。
双方系统约定文件服务器地址、密码、文件命名规则、文件内容格式等,通过上传文件到文件服务器,进行数据交互,对大数据量的也很适合。这就是一种异步的上传下载机制,双方的操作割裂开,并且一旦上传可以被多个需求方使用。

消息队列MQ(Message Queue)

消息队列技术是分布式应用间交换信息的一种技术。目前市场上有很多开源的jms消息中间件,比如ActiveMQ, OpenJMS。
简单说就是一方不断把信息推到队列中,像排队进隧道一样,另一方依次消费这些信息。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。
该方式更适用于公司内部,数据量大,规律性强,批量往来的数据。主要解决应用解耦,异步消息,流量削锋等问题。

其他手段

爬取数据

比如需要获取第三方网站商标库中最新商标名称、注册地、logo、授权期限等信息,如果该网站不给于开放的接口授权,可能就需要我们开发写爬虫代码爬取,当然有的商业数据也是带有反爬机制的。
爬取第三方数据的防止丢包机制
案例:到SFTP服务器抓取并解析字段,写入数据表。
方案:

  1. 断抓补抓:比如:4号抓修改时间为3号的数据。5号断抓,则6号抓取4、5号的数据。7号抓取6号的数据。
  2. 抓空补抓:网关的每次抓取若抓空(获取的数据是0个)则下次继续抓。直到三次都未取到。则不再补救。

    导入导出

    数据量大的,且有规则数据也可以通过导入的方式。
    文档一般用csv格式,文件较小,兼容性好,然后需要定义好excel表格对应字段的关系即可。上传时需要对文件检验,建议方案是一旦一处错误,就全部不予导入。并返回错误提示,修改后继续导入。
    若数据太大(与服务器的性能也有关系,比如超过一万条),可以采用异步上传机制,就是上传之后不立即执行写入,而是后台自动分批写入。
    全量、增量

    数据传输的处理机制

数据库

作为产品要了解数据库到什么程度呢?
达到两点即可:

理解数据库作用原理,使你能更好与开发互相沟通,更好输出方案; 会用简单常用的SQL查询日常问题,实现基本的数据库应用价值。

你在互联网看到一切皆“下载”

下载的就是服务器上的数据,广义地说,凡是存储数据的,都算是数据库,包括浏览器的缓存。 前端界面看到的内容,如果不是代码写死的,那么就是从数据库调取的。这就是为什么你看到页面会常常出现图片滞后,因为图片调用比较慢。 数据库就好像是一个仓库,开发用代码实现对其中数据的取值,最终给到页面呈现出来。

关系型数据库和非关系型数据库

关系型数据库
MYSQL为典范,以二位报表的形式展示,因此MYSQL和PHP的组合是比较完美(报表多)。比MYSQL强大的关系型数据库还有ORACLE,比如1000W条数据以上级别的数据,一般用的比较多的是ORACLE。
MYSQL每张表只能有一个主键,但开发会创建多个字段的索引,目的是为了提高查询速度,至少提升上百倍查询速度。
非关系型数据库(NoSQL)
NoSQL是作为传统关系型数据库的一个有效补充,处理对存储要求高,且并发处理较高的场合。
主要是数据库Mongodb,数据是散漫的,以键值对的形式存储,{ “key1”:”valude1” ,“key2”:” valude2 ” ,“key3”:” valude3”}。