一种仓位数据管理方法、装置及系统与流程

文档序号:20922665 发布日期:2020-05-29 14:48
一种仓位数据管理方法、装置及系统与流程

本公开涉及数据通信技术领域,尤其涉及一种基于cqrs的数据管理方法、装置及系统。



背景技术:

虚拟货币合约系统的核心是仓位系统,虚拟货币的所有变更,用户的操作都会反映到仓位上。仓位系统的稳定性、性能数据准确性都成为影响合约系统成败的关键。甚至仓位系统的数据计算错误有可能会造成交易所极大的损失。

由于仓位系统处于核心位置,仓位系统必然会存在极大地数据计算需求,超大的计算量,以及极高概率的并发处理情况(查询和写入同时进行)。这也导致仓位系统可能存在一些问题:仓位系统和账户系统交互过程中,由于复杂的并发处理,数据可能会发生不一致的情况;查询和写入使用同一个mysql数据库,大量的请求和计算作用在同一条数据上,给数据造成极大地压力,同时也会造成仓位系统服务不稳定和性能的下降;查询和写入使用同一组件,导致强依赖性,扩展性极差同时不易于分工合作。以上三点最终导致系统的可用性降低,用户的体验度差。



技术实现要素:

为克服相关技术的问题,本申请提供一种仓位数据管理方法、装置及系统,基于命令查询职责分离模式,减少各个系统组件之间的依赖性,增强扩展性和可维护性,从而提高系统的可用性,提高用户体验度。

本申请的第一方面,提供一种仓位数据管理方法,所述方法包括:获取用户输入的仓位更改请求;其中,所述仓位更改请求包括仓位变更命令;根据所述仓位变更命令更改原数据,并将更改后的所述原数据发送至写入数据库;根据所述仓位变更命令生成变更消息,并将所述变更消息发送至查询数据库。

结合一方面,在第一种可能的实现方式中,所述仓位更改请求标记有用户id,所述仓位变更命令、所述原数据、所述写入数据库、所述变更消息以及所述查询数据库均存储于同一处理平台,所述用户id和所述处理平台相对应。

结合一方面,在第二种可能的实现方式中,所述原数据标记有第一时间信息,所述变更消息标记有第二时间信息。

结合第二种可能的实现方式,在第三种可能的实现方式中,所述方法还包括:获取用户输入的数据查询请求,其中,所述数据查询请求包括数据查询命令,所述数据查询命令标记有第三时间信息;根据所述第三时间信息和所述第一时间信息之间的关系,从所述写入数据库获取与所述数据查询命令相对应的所述原数据;根据所述第三时间信息和所述第二时间信息之间的关系,从所述查询数据库获取与所述数据查询命令相对应的所述变更消息;根据所述变更消息更改所述原数据,得到查询数据。

结合第三种可能的实现方式,在第四种可能的实现方式中,根据所述第三时间信息和所述第一时间信息之间的关系,从所述写入数据库获取与所述数据查询命令相对应的所述原数据,包括:如果所述第三时间信息和所述第一时间信息相同,则将写入数据库中与所述第一时间信息相对应的所述原数据作为与所述数据查询命令相对应的所述原数据;根据所述第三时间信息和所述第二时间信息之间的关系,从所述查询数据库获取与所述数据查询命令相对应的所述变更消息,包括:如果所述第三时间信息和所述第二时间信息相同,则将所述查询数据库与所述第二时间信息相对应的所述变更消息,作为与所述数据查询命令相对应的所述变更消息。

本申请的第二方面,提供一种仓位数据管理装置,所述装置包括:第一请求获取单元,用于获取用户输入的仓位更改请求;其中,所述仓位更改请求包括仓位变更命令;第一更改单元,用于根据所述仓位变更命令更改原数据,并将更改后的所述原数据发送至写入数据库;消息生成单元,用于根据所述仓位变更命令生成变更消息,并将所述变更消息发送至查询数据库。

结合二方面,在第五种可能的实现方式中,所述原数据标记有第一时间信息,所述变更消息标记有第二时间信息。

结合第五种可能的实现方式,在第六种可能的实现方式中,所述装置还包括:第二请求获取单元,用于获取用户输入的数据查询请求,其中,所述数据查询请求包括数据查询命令,所述数据查询命令标记有第三时间信息;第一数据获取单元,用于根据所述第三时间信息和所述第一时间信息之间的关系,从所述写入数据库获取与所述数据查询命令相对应的所述原数据;第二数据获取单元,用于根据所述第三时间信息和所述第二时间信息之间的关系,从所述查询数据库获取与所述数据查询命令相对应的所述变更消息;第二更改单元,用于所述变更消息更改所述原数据,得到查询数据。

结合第六种可能的实现方式,在第七种可能的实现方式中,所述第一数据获取单元,用于根据所述第三时间信息和所述第一时间信息之间的关系,从所述写入数据库获取与所述数据查询命令相对应的所述原数据,包括:如果所述第三时间信息和所述第一时间信息相同,则将写入数据库中与所述第一时间信息相对应的所述原数据作为与所述数据查询命令相对应的所述原数据;所述第二数据获取单元,用于根据所述第三时间信息和所述第二时间信息之间的关系,从所述查询数据库获取与所述数据查询命令相对应的所述变更消息,包括:如果所述第三时间信息和所述第二时间信息相同,则将所述查询数据库与所述第二时间信息相对应的所述变更消息,作为与所述数据查询命令相对应的所述变更消息。

本申请的第三方面,提供一种仓位数据管理系统,所述系统包括:用户接口,用于接收用户输入的仓位更改请求和数据查询请求;其中,所述仓位更改请求包括仓位变更命令,所述数据查询请求包括数据查询命令;获取用户输入的数据查询请求,其中,所述数据查询请求包括数据查询命令,所述数据查询命令标记有第三时间信息数据写入装置,用于执行:根据所述仓位变更命令更改原数据,并将更改后的所述原数据发送至写入数据库;根据所述仓位变更命令生成变更消息,并将所述变更消息发送至查询数据库;其中,所述原数据标记有第一时间信息,所述变更消息标记有第二时间信息;数据查询装置,用于执行:根据所述第三时间信息和所述第一时间信息之间的关系,从所述写入数据库获取与所述数据查询命令相对应的所述原数据;根据所述第三时间信息和所述第二时间信息之间的关系,从所述查询数据库获取与所述数据查询命令相对应的所述变更消息;根据所述变更消息更改所述原数据,得到查询数据。

本申请实施例提供一种仓位数据管理方法、装置及系统,包括:获取用户输入的仓位更改请求;其中,所述仓位更改请求包括仓位变更命令;根据所述仓位变更命令更改原数据,并将更改后的所述原数据发送至写入数据库;根据所述仓位变更命令生成变更消息,并将所述变更消息发送至查询数据库。与现有技术相比,本申请基于命令查询职责分离模式,将写入操作以命令的形式进行转发和处理,将仓位的更改过程记录下来并保存,从而将写入操作和查询操作分开进行,写入操作和查询操作是使用不同的系统组件,进而减少各个组件之间的依赖性,增强扩展性和可维护性,最终提高系统的可用性,提高用户体验度。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。

图1为本申请实施例提供的仓位数据管理方法的工作流程示意图;

图2是本申请实施例提供的仓位数据管理系统的框架示意图;

图3是本申请优选实施例提供的仓位数据管理方法的工作流程示意图;

图4是本申请实施例提供的仓位数据管理装置框架示意图;

图5是本申请优选实施例提供的仓位数据管理装置框架示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。

为了全面理解本申请,在以下详细描述中提到了众多具体的细节,但是本领域技术人员应该理解,本申请可以无需这些具体细节而实现。在其他实施例中,不详细描述公知的方法、过程、组件和电路,以免不必要地导致实施例模糊。

参见图1所示仓位数据管理方法的工作流程示意图,图1所示的方法为写入数据的过程,所述方法包括以下步骤:

步骤101,获取用户输入的仓位更改请求;其中,所述仓位更改请求包括仓位变更命令。

如图2所示的本申请实施例示出的仓位数据管理系统,所述系统包括:用户接口100、数据写入装置200和数据查询装置300,用户接口100用于接收用户输入的仓位更改请求。其中,仓位更改请求包括仓位变更命令。用户接口100可以是终端的ui界面,用户通过ui界面输入仓位更改请求,例如通过虚拟货币网站的操作界面输入抛售虚拟货币等仓位更改请求,此时仓位更改请求即包括了减小仓位数据的仓位变更命令。

步骤102,根据所述仓位变更命令更改原数据,并将更改后的所述原数据发送至写入数据库。

从用户接口100输入仓位变更命令后,数据写入装置200根据仓位变更命令更改相关数据。数据写入装置200可以包括命令处理器210、仓位领域模型220、数据处理层230以及写入数据库240。命令处理器210接收到命令后,对命令进行过滤处理,只将仓位变更命令向下传送至仓位领域模型220,仓位领域模型220可以是针对不同数据类型建立的处理模型,这里仓位变更命令中可以包括对数据的处理方式,仓位领域模型220根据处理方式选择不同的数据模型,将数据模型和仓位变更命令继续向下传输至数据处理层230。数据处理层230接收到数据模型和仓位变更命令之后,根据仓位变更命令对应的数据和数据模型对原数据进行处理,得到更改后的原数据,并将更改后的原数据存储到写入数据库240。

比如,用户通过用户接口100向命令处理器210输入仓位更改请求a,其中仓位更改请求a包括:购买虚拟货币类型m个数为100。则在仓位领域模型220中选择模型类型是m,数据处理层230根据m数据模型在虚拟货币m原数据n个数基础上加100,得到更改后的所述原数据m+100,最后将虚拟货币m的当前数据m+100发送至写入数据库。

步骤103,根据所述仓位变更命令生成变更消息,并将所述变更消息发送至查询数据库。

数据处理层230处理数据过程中根据仓位变更命令生成变更消息,即数据的更改过程保存为变更消息,发送至查询数据库存储。沿用上述实施例,数据处理层230根据m数据模型在虚拟货币m原数据n个数基础上加100的更改过程,保存为变更消息,首先发送至消息处理器310,消息处理器310最后将处理后的变更消息发送中查询数据库320。

另外,所述仓位更改请求标记有用户id,所述仓位变更命令、所述原数据、所述写入数据库、所述变更消息以及所述查询数据库均存储于同一处理平台,所述用户id和所述处理平台相对应。比如,仓位更改请求标记用户注册时的id,仓位更改请求包括的仓位变更命令同样标记有用户注册时的id,根据id,将仓位变更命令发送到与用户注册编号相对应的处理平台,可以是发送到用户id对应的kafkapartition。针对同一用户,在同一个kafkapartition进行数据写入和数据查询操作,能够保证对用户数据的修改为单线程,从而避免发生并发问题。

原数据还可以标记第一时间信息,变更消息可以标记第二时间信息。这里原数据可以是相对的概念,比如虚拟货币m的数据包括多个时间段数据:1月1日12:00的数据m1,1月1日24:00的数据m2,1月2日12:00的数据m3,m1是m2的原数据,m2则是m3的原数据。1月1日12:00则为m1的第一时间信息,1月1日24:00则为m2的第一时间信息,1月2日12:00则为m3的第一时间信息。

相应的,如图3所示,为查询数据的过程,包括:

步骤s104,获取用户输入的数据查询请求,其中,所述数据查询请求包括数据查询命令,所述数据查询命令标记有第三时间信息。

比如,用户输入的针对虚拟货币m的数据查询请求,数据查询请求包括数据查询命令,并标记了第三时间信息:1月1日24:00。用户接口获取到用户的数据查询请求后经过查询处理器330的处理后发送给查询数据库320。

步骤s105,根据所述第三时间信息和所述第一时间信息之间的关系,从所述写入数据库获取与所述数据查询命令相对应的所述原数据。具体的,根据所述第三时间信息和所述第一时间信息之间的关系,从所述写入数据库获取与所述数据查询命令相对应的所述原数据,包括:如果所述第三时间信息和所述第一时间信息相同,则将写入数据库中与所述第一时间信息相对应的所述原数据作为与所述数据查询命令相对应的所述原数据。

沿用上述实施例,获取到需要查询的数据的第三时间信息为1月1日24:00,根据第三时间和第一时间的关系,即获取到第一时间同样为1月1日24:00的原数据,第一时间为1月1日24:00的数据为m2,则将m2作为与当前数据查询命令相对应的原数据。

步骤s106,根据所述第三时间信息和所述第二时间信息之间的关系,从所述查询数据库获取与所述数据查询命令相对应的所述变更消息。具体的,根据所述第三时间信息和所述第二时间信息之间的关系,从所述查询数据库获取与所述数据查询命令相对应的所述变更消息,包括:

如果所述第三时间信息和所述第二时间信息相同,则将所述查询数据库与所述第二时间信息相对应的所述变更消息,作为与所述数据查询命令相对应的所述变更消息。

沿用上述实施例,获取到需要查询的数据的第三时间信息为1月1日24:00,根据第三时间和第二时间的关系,从查询数据库320获取到第二时间同样为1月1日24:00的变更消息。比如记录的时间为1月1日24:00的变更消息为根据m数据模型在虚拟货币m原数据n个数基础上加100的更改过程。

步骤s107,根据所述变更消息更改所述原数据,得到查询数据。

获取的原数据为第一时间为1月1日24:00的数据m2,获取的变更消息为根据m数据模型在虚拟货币m原数据n个数基础上加100的更改过程,则按照记录的更改过程对数据m2进行更改。即在m2原数据n2个数基础上加100的更改过程,得到最终的查询数据m2+100。最终的查询数据结果也可以通过用户接口100反馈给用户,比如通过ui界面展示给用户。

本申请实施例提供一种仓位数据管理方法,包括:获取用户输入的仓位更改请求;其中,所述仓位更改请求包括仓位变更命令;根据所述仓位变更命令更改原数据,并将更改后的所述原数据发送至写入数据库;根据所述仓位变更命令生成变更消息,并将所述变更消息发送至查询数据库。与现有技术相比,本申请基于命令查询职责分离模式,将写入操作以命令的形式进行转发和处理,将仓位的更改过程记录下来并保存,从而将写入操作和查询操作分开进行,写入操作和查询操作是使用不同的系统组件,进而减少各个组件之间的依赖性,增强扩展性和可维护性,最终提高系统的可用性,提高用户体验度。

当仓位变更命令写入数据写入装置后,变更消息再以可靠消息的方式转发出去,数据查询装置可以监听此消息,还原出可供查询的数据变更过程,同样写入mysql数据库,供用户查询使用。强平模块和adl模块都需要完整的仓位信息来做自己的业务,但是如果每次同步完整数据,那么速度会完全跟不上。所以强平模块和adl模块可以监听此消息,通过顺序消费仓位的每一条变更消息,就可以还原出当前仓位的具体情况。同时,还能提供仓位变更的回溯功能,可以还原到任何时间点的仓位状态,为账务的实时校对和离线校对提供基础,保证数据的准确性。

另外,为了可以无限扩展出仓位数据,可以使用分库分表方案,比如将数据分为10个库10个表,仓位数据均匀的分布在这100张表中。假设一张表能够存储一亿数据,那么整个系统能够存储100亿数据。还可以对数据做过期迁移方案,可以迁移一个月以前的数据,能够有效的提升数据的存储能力。

下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。参见图4所示的装置结构示意图,本申请实施例提供一种仓位数据管理装置,所述装置包括:

第一请求获取单元u1001,用于获取用户输入的仓位更改请求;其中,所述仓位更改请求包括仓位变更命令;

第一更改单元u1002,用于根据所述仓位变更命令更改原数据,并将更改后的所述原数据发送至写入数据库;

消息生成单元u1003,用于根据所述仓位变更命令生成变更消息,并将所述变更消息发送至查询数据库。

进一步地,所述原数据标记有第一时间信息,所述变更消息标记有第二时间信息。

另外,如图5所示,所述装置还可以包括:

第二请求获取单元u1004,用于获取用户输入的数据查询请求,其中,所述数据查询请求包括数据查询命令,所述数据查询命令标记有第三时间信息;

第一数据获取单元u1005,用于根据所述第三时间信息和所述第一时间信息之间的关系,从所述写入数据库获取与所述数据查询命令相对应的所述原数据;

第二数据获取单元u1006,用于根据所述第三时间信息和所述第二时间信息之间的关系,从所述查询数据库获取与所述数据查询命令相对应的所述变更消息;

第二更改单元u1007,用于所述变更消息更改所述原数据,得到查询数据。

进一步地,所述第一数据获取单元u1005,用于根据所述第三时间信息和所述第一时间信息之间的关系,从所述写入数据库获取与所述数据查询命令相对应的所述原数据,包括:

如果所述第三时间信息和所述第一时间信息相同,则将写入数据库中与所述第一时间信息相对应的所述原数据作为与所述数据查询命令相对应的所述原数据;

所述第二数据获取单元u1006,用于根据所述第三时间信息和所述第二时间信息之间的关系,从所述查询数据库获取与所述数据查询命令相对应的所述变更消息,包括:

如果所述第三时间信息和所述第二时间信息相同,则将所述查询数据库与所述第二时间信息相对应的所述变更消息,作为与所述数据查询命令相对应的所述变更消息。

下述为本申请系统实施例,可以用于执行本申请方法实施例。对于本申请系统实施例中未披露的细节,请参照本申请方法实施例。参见图2所示的仓位数据管理系统框架示意图,所述系统包括:

用户接口100,用于接收用户输入的仓位更改请求和数据查询请求;其中,所述仓位更改请求包括仓位变更命令,所述数据查询请求包括数据查询命令;

获取用户输入的数据查询请求,其中,所述数据查询请求包括数据查询命令,所述数据查询命令标记有第三时间信息;

数据写入装置200,用于执行:

根据所述仓位变更命令更改原数据,并将更改后的所述原数据发送至写入数据库;

根据所述仓位变更命令生成变更消息,并将所述变更消息发送至查询数据库;

其中,所述原数据标记有第一时间信息,所述变更消息标记有第二时间信息;

数据查询装置300,用于执行:

根据所述第三时间信息和所述第一时间信息之间的关系,从所述写入数据库获取与所述数据查询命令相对应的所述原数据;

根据所述第三时间信息和所述第二时间信息之间的关系,从所述查询数据库获取与所述数据查询命令相对应的所述变更消息;

根据所述变更消息更改所述原数据,得到查询数据。

具体实现中,本申请还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可包括本申请提供的一种基于规则的报文检测方法的各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、rom(read-onlymemory,只读存储记忆体)或ram(randomaccessmemory,随机存储记忆体)等。

本领域的技术人员可以清楚地了解到本申请实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。

本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例中的说明即可。

以上结合具体实施方式和范例性实例对本申请进行了详细说明,不过这些说明并不能理解为对本申请的限制。本领域技术人员理解,在不偏离本申请精神和范围的情况下,可以对本申请技术方案及其实施方式进行多种等价替换、修饰或改进,这些均落入本申请的范围内。本申请的保护范围以所附权利要求为准。

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