解除关系型数据库中数据间主键ID依赖的系统及方法与流程

文档序号:37901374发布日期:2024-05-09 21:45阅读:11来源:国知局
解除关系型数据库中数据间主键ID依赖的系统及方法与流程

本发明涉及数据库,尤其涉及一种解除关系型数据库中数据间主键id依赖的系统及方法。


背景技术:

1、关系型数据库中表、主键id、关联id是必要的组成要素,但也为数据入库处理带来了一些问题。其中主键id数据的生成顺序必须在关联数据入库之前,否则可能造成关联数据表中因缺少关联数据id而导致数据缺失破坏数据完整性乃至无法正常入库的情况。

2、以竞技型赛事型数据(如:足、篮球)处理来举例说明,竞技型赛事的数据维度可分为联赛基本信息、赛季信息、赛事阶段信息、球队基本信息、比赛数据维度信息(赛况、事件、统计、位置等)。那么在基于关系型数据库设计时,就会按照该维度将数据分散到不同的表中存储,并通过主键id将数据串联起来,这就天然形成了表间id关系的相互依赖。然而这些数据在数据更新频度和更新时间点上存在巨大的差异,有些数据赛季中只更新一次,有些只在赛季过程中的某个时间点更新,有些则以分钟级或秒级更新。因此数据更新的先后次序以及数据完整性保障的处理方式就成为了要攻克的难题。

3、现有技术会出现两种可能的处理方式如下:

4、1、数据游标等待法——等待所需数据完整后再更新:

5、请参阅图1,可能的实现方式:根据数据特征构建数据游标,一般选择数据的自增id或数据更新时间戳或联合多值作为数据游标。数据入库及更新则根据数据游标抽取到变化的数据然后执行数据库层面的增删改查操作。然而因为数据间存在基于主键id的关联关系,因此需要这些数据所依赖的所有联赛id、阶段id、赛季id等都能够分别从各自表中查询到对应的id后才能正常入库,数据游标cursor才可以更新后移;否则一直原地等待。

6、这种方案会导致数据更新大量阻塞延迟,由于数据游标无法更新后移导致正常的完整数据也无法得到正常更新。该方案实现简单但仅限于应用在对数据更新频度不敏感的业务。

7、2、异步回补充法——优先入库再回补缺失的数据。

8、请参阅图2,可能的实现方式:该方法是对数据游标等待法的改良升级,当根据游标抽取到变化的数据后,数据所依赖的任一联赛id、阶段id、赛季id等缺失时,直接投送一条消息体到消息队列服务上,并继续向后处理,数据游标cursor正常更新。消息队列服务绑定异步消费者程序不断轮询对应的数据维度是否有待处理;如果有则进行数据的回补录入以保障数据的完整性,并从消息队列任务中删除此消息体。

9、这种方案虽然保障了数据的完整性和保障了数据的更新速率,但代价是提高了开发和维护成本,具体表现如下:

10、引入了新的技术选型。在本例中是引入了消息队列服务,增加了开发量,增加了系统复杂度、增加了故障点。在运维过程中对问题的定位和排查也造成了困难,提升了维护管理成本。

11、2、由于数据存在中间态也就是数据虽入库但还不完整不能在业务中使用,因此数据的应用方需要对此进行判断和抉择数据是否可用,增加了应用开发层面的逻辑复杂度和维护成本。

12、因此现有技术中的数据入库时,由于主键id数据的生成顺序必须在关联数据入库之前,否则可能造成关联数据表中因缺少关联数据id而导致数据缺失破坏数据完整性乃至无法正常入库的情况,现有的解决方法存在数据更新异常或是增加维护成本的问题。

13、因此现有技术还有待于进一步发展。


技术实现思路

1、针对上述技术问题,本发明实施例提供了一种解除关系型数据库中数据间主键id依赖的系统及方法,能够解决现有技术中数据入库时,由于主键id数据的生成顺序必须在关联数据入库之前,否则可能造成关联数据表中因缺少关联数据id而导致数据缺失破坏数据完整性乃至无法正常入库的情况,现有的解决方法存在数据更新异常或是增加维护成本的问题的技术问题。

2、本发明实施例的第一方面提供一种解除关系型数据库中数据间主键id依赖的系统,系统包括业务逻辑层、通用业务逻辑层和基础设施层;

3、所述业务逻辑层用于对各个业务模型的数据进行更新;

4、所述通用业务逻辑层用于对所述业务逻辑层所需的通用业务模型及功能进行维护;

5、所述基础设施层用于对数据库进行操作以及对数据进行组装,解耦选型依赖;

6、所述通用业务逻辑层还包括id映射服务模块和id生成模块,

7、所述id映射服务模块用于提供id映射服务,所述id映射服务用于解除数据间的相互依赖,使得数据依赖于id映射服务;

8、所述id生成模块用于对id生成器规则和功能进行定义以及对外提供id生成服务。

9、可选地,所述id映射服务模块包括id管理单元、id映射构建单元、id生成单元和接入管理id生成器单元;

10、所述id管理单元用于提供id映射服务托管注册和管理服务,所述id映射服务用于解除数据间的相互依赖,使得数据依赖于id映射服务;

11、所述id映射构建单元用于构建和保存数据原生id与id生成器返回id的映射关系;

12、所述id生成单元用于对外提供id生成的api服务;

13、所述接入管理id生成器单元用于对id生成器的接入并对接入的id生成器进行管理。

14、可选地,所述id生成模块包括id生成器定义单元和id生成器服务提供单元;

15、id生成器定义单元,用于对id的自增模式选择、创建id生成器标识、设定id起始值及id自增步长,定义实现特定功能接口定义的方法规则;

16、id生成器服务提供单元,用于对外提供id生成服务。

17、可选地,所述基础设施层包括id映射服务模块数据库选型模块和id生成器数据库工具选型模块;

18、所述id映射服务模块数据库选型模块,用于记录id映射服务托管方信息,存储原始数据信息与id生成器id的映射关系,调用id生成器生成一个可用id;

19、所述id生成器数据库工具选型模块,用于生成唯一性的id。

20、可选地,所述id生成器数据库工具选型模块采用redis数据库counter工具,所述redis数据库counter工具用于根据redis数据库的incr方法的原子操作性和单调递增性,来满足对id生成并发安全及数据唯一性的要求。

21、本发明实施例第二方面提供了一种解除关系型数据库中数据间主键id依赖的方法,方法包括:

22、检测到第一数据更新指令,向id映射服务模块发送第二数据的id信息获取请求,根据所述id信息获取请求查找待获取的id,其中,待获取的id为与第一数据关联的第二数据对应的id;

23、判断待获取的id是否已在id映射服务模块中注册;

24、若待获取的id未在id映射服务模块中注册,则触发业务报错;

25、若待获取的id已在id映射服务中注册,则将第一数据与所述id进行关联,完成数据入库。

26、可选地,所述检测到第一数据更新指令,向id映射服务模块发送第二数据的id信息获取请求,根据所述id信息获取请求查找待获取的id,其中,待获取的id为与第一数据关联的第二数据对应的id前,还包括:

27、预先在id映射服务模块中注册第二数据,得到第二数据对应的id。

28、可选地,所述若待获取的id已在id映射服务中注册,则将第一数据与所述id进行关联,完成数据入库,包括:

29、若待获取的id已在id映射服务中注册,则判断是否存在已映射好的id关系;

30、若存在已映射好的id关系,则根据已映射好的id关系获取id对应的结果,将第一数据与所述id进行关联,完成数据入库。

31、可选地,所述若待获取的id已在id映射服务中注册,则判断是否存在已映射好的id关系后,还包括:

32、若不存在已映射好的id关系,则基于id映射服务调用id生成器获取一个新的id,并根据调用方的特征信息建立好映射关系完成入库,并返回调用方。

33、可选地,所述若待获取的id已在id映射服务中注册,则将第一数据与所述id进行关联,完成数据入库后,还包括:

34、若检测到第二数据更新时,查看id映射服务中是否已经存在了映射关系;

35、若id映射服务存在映射关系,则直接使用已存在的id作为主键入库;

36、若id映射服务不存在映射关系,则申请一个id并构建id映射关系以提供给其他业务使用。

37、本发明实施例提供的技术方案中,检测到第一数据更新指令,向id映射服务模块发送第二数据的id信息获取请求,根据所述id信息获取请求查找待获取的id,其中,待获取的id为与第一数据关联的第二数据对应的id;判断待获取的id是否已在id映射服务模块中注册;若待获取的id未在id映射服务模块中注册,则触发业务报错;若待获取的id已在id映射服务中注册,则将第一数据与所述id进行关联,完成数据入库。本发明通过引入中间关联id映射模块使得不同数据维度间不再依赖对方,而是都去依赖对应的id映射服务,达成“谁先更新谁先占位创建映射关系并获取id”的方式,实现成本较低。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1