CN110457380A - 一种数据存储系统 - Google Patents

一种数据存储系统 Download PDF

Info

Publication number
CN110457380A
CN110457380A CN201910726633.3A CN201910726633A CN110457380A CN 110457380 A CN110457380 A CN 110457380A CN 201910726633 A CN201910726633 A CN 201910726633A CN 110457380 A CN110457380 A CN 110457380A
Authority
CN
China
Prior art keywords
data
uniformity
server
storage
initial data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201910726633.3A
Other languages
English (en)
Inventor
严哲璟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou Baiguoyuan Information Technology Co Ltd
Original Assignee
Guangzhou Baiguoyuan Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangzhou Baiguoyuan Information Technology Co Ltd filed Critical Guangzhou Baiguoyuan Information Technology Co Ltd
Priority to CN201910726633.3A priority Critical patent/CN110457380A/zh
Publication of CN110457380A publication Critical patent/CN110457380A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2291User-Defined Types; Storage management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种数据存储系统,该系统包括统一性服务端、至少两个存储客户端、数据库和统一性接口;存储客户端与统一性服务端连接;统一性服务端通过统一性接口与数据库连接;存储客户端用于将原始数据通过统一传输结构发送给统一性服务端;统一性服务端用于将原始数据转换为统一归档结构数据后,通过统一性接口发送给数据库;数据库根据统一归档结构数据的数据类型存储对应的原始数据,通过统一传输结构将不同数据类型的原始数据发送给统一性服务端,以使统一性服务端将原始数据转换为统一归档结构数据,并通过统一性接口将原始数据发送给数据库,实现了对不同数据类型原始数据的统一归档存储。

Description

一种数据存储系统
技术领域
本发明实施例涉及数据存储领域,尤其涉及一种数据存储系统。
背景技术
随着互联网应用服务数量和类型的日益增加,对于一个应用平台甚至一个小型应用系统可能存在着多种不同类型的数据存储,比如,缓存Redis用于记录用户暂时操作数据,K-V数据库存储映射信息,以及面向文档的数据库存储二进制数据或结构化数据。而数据存储的备份或归档留底则是一种保持业务高可用,系统稳定性,服务健壮性和数据恢复备份的手段。
针对企业而言,对于多种类型的数据存储,目前大部分的应用都是分团队,分数据中心进行不同数据存储的备份,如专门负责维护MySQL的团队,专门负责维护Redis的团队。图1是现有技术中提供的一种数据存储系统的结构框图。如图1所示,不同的数据存储需采用对应的数据存储系统进行存储归档,并对这些数据存储进行单独维护,其成本高而且效率低。
发明内容
本发明实施例提供了一种数据存储系统,实现了对不同类型数据的统一归档存储。
第一方面,本发明实施例提供了一种数据存储系统,包括:统一性服务端、至少两个存储客户端、数据库和统一性接口;所述存储客户端与所述统一性服务端连接;所述统一性服务端通过所述统一性接口与所述数据库连接;
所述存储客户端用于将原始数据通过统一传输结构发送给所述统一性服务端;
所述统一性服务端用于将所述原始数据转换为统一归档结构数据后,通过所述统一性接口发送给所述数据库;
所述数据库根据所述统一归档结构数据的数据类型存储对应的原始数据。
本发明实施例提供了一种数据存储系统,存储客户端用于将原始数据通过统一传输结构发送给统一性服务端;统一性服务端用于将原始数据转换为统一归档结构数据后,通过统一性接口发送给数据库;数据库根据统一归档结构数据的数据类型存储对应的原始数据,本发明实施例的方式,通过统一传输结构将不同数据类型的原始数据发送给统一性服务端,以使统一性服务端将原始数据转换为统一归档结构数据,并通过统一性接口将原始数据发送给数据库,实现了对不同数据类型原始数据的统一归档存储。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1是现有技术中提供的一种数据存储系统的结构框图;
图2为本发明实施例提供的一种数据存储系统的结构框图;
图3是本发明实施例提供的一种断点续传的流程示意图;
图4是本发明实施例提供的另一种断点续传的流程示意图;
图5是本发明提供的一种数据库的归档存储过程的流程图;
图6是本发明实施例提供的另一种数据存储系统的结构框图;
图7是本发明实施例提供的一种统一归档的处理结构图;
图8是本发明实施例提供的一种统一性服务端提供的投递路由接口的流程示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
图2为本发明实施例提供的一种数据存储系统的结构框图,本发明实施例的方案可以适用于对不同数据类型的原始数据进行统一归档存储的情况。本实施例提供的一种数据存储系统可以通过软件和/或硬件的方式来实现。
具体的,参考图2,该系统可以包括:统一性服务端110、至少两个存储客户端120、数据库130和统一性接口(未示出);存储客户端120与统一性服务端110连接;统一性服务端110通过统一性接口与数据库130连接;存储客户端120用于将原始数据通过统一传输结构发送给统一性服务端110;统一性服务端110用于将原始数据转换为统一归档结构数据后,通过统一性接口发送给数据库130;数据库130根据统一归档结构数据的数据类型存储对应的原始数据。
需要说明的是,本发明实施例中的数据存储系统采用客户端/服务端(Client/Server,C/S)模型进行设计。在实施例中,统一性服务端即为Server,存储客户端即为Client。其中,为了便于对本发明实施例中的数据存储系统的统一归档进行说明,实施例中的至少两个存储客户端120为不同类型的存储客户端,比如,一个存储客户端120为MySQL,另一个存储客户端120为Riak-KV。其中,Client和Server都采用Go语言编写,Server基于beego框架和MVC模式。换句话说,统一性服务端基于模型-视图-控制器(Model-View-Controller,MVC)模式。其中,beego框架是基于Go开发的一个web框架,与普通MVC框架类似,beego框架具有路由(Route),控制器(Controller)和模型(Model)这几个基本组件,并有RESTFUL架构支持,可以使用Bee工具快速开发应用。并且,beego可通过重写Controller方法进行Route Handler(是一种渲染当前子路由处理器的组件)的处理,且支持注解路由和动态路由生成,采用Go原生的超文本传输协议(Hyper Text Transfer Protocol,HTTP)包来处理请求,由于Go语言的强大的并发能力,足以应对大流量和高并发。
需要理解的是,实施例中的数据存储系统实现了对不同数据类型的原始数据的统一存储,并非在存储不同数据类型的原始数据时,调用了同一个接口(即统一性接口),而是自定义了统一传输结构,统一归档结构,以及统一性接口。其中,统一传输结构能够解析大部分不同类型原始数据的特征,以及具有raw字段,其中,raw字段用来表示数据对应的字节块;统一归档结构用来定义所有数据通用的部分,比如,包括备份的结构到表的结构,也包括与哪个项目关联的信息;统一性接口指的是用来一种用来实现各种自定义函数的接口,在实现自定义函数时,也就实现了对不同数据类型进行存储的统一性。
需要说明的是,由于不同数据类型的原始数据进行存储时,所采用的存储方法,存储介质和存储方式均不一样。比如,关系型数据库,以元组-磁盘块的形式存储;又如,K-V值数据库(即一种非关系型数据库的存储),底层可以是一个分布式哈希表和一致性哈希表;又如,结构化的数据或文档数据库,底层可以是倒排索引;甚至有的数据库,就是一个链式线性表。而实施例中的数据存储系统,采用了一个一致理念(数据存储都具有某种动态规律),即能够被存储和备份的数据必然具有某种线性,比如,都可以在网络中以顺序字节流的方式传输。即使是关系数据库也具有类似的性质,比如,MySQL,其操作可以被划分为顺序的事件,再如,PostgreSQL,是一种基于原生支持的流复制(streaming Replication)的对象关系型数据库系统,其本质上也是顺序数据读写(即数据特征加字节流)。
需要解释的是,为了能够实现数据存储系统的统一性归档存储,在实施例中定义的统一传输结构,可以理解为,存储客户端对所要传输的原始数据进行结构化处理,从而存储客户端在通过网络将原始数据传输至统一性客户端时,原始数据的描述已经是结构化的数据了,在传输过程中是没有现实意义的,而在统一性服务端进行归档的时候,将一系列的结构存储起来,又成为了具有特性的数据存储。当然,在原始数据为不同数据类型时,其进行结构化处理的方式也是不同的,只是结构化的数据均可以实现统一传输结构,从而可以通过统一传输结构发送至统一性服务端。具体来说,存储客户端可根据原始数据自身的特性对其进行结构化处理。比如,Riak的最小单位为文件,则在原始数据的类型为Riak时,需以文件的形式进行数据传输;又如,MySQL的最小单位为行,则在原始数据类型为MySQL时,可以行的形式进行数据传输。
在统一性服务端接收到不同存储客户端发送的统一传输结构的原始数据之后,将统一传输结构的原始数据转换为统一归档结构数据,然后调用统一性接口对应函数,实现不同数据类型的原始数据的统一归档。当然,由于不同数据类型的归档配置参数不同,在对原始数据进行存储时,需根据统一归档结构数据中提取到的数据类型,查找到对应的归档配置参数,以采用归档配置参数的具体数据信息对原始数据进行归档存储。
本实施例提供的技术方案,通过统一传输结构将不同数据类型的原始数据发送给统一性服务端,以使统一性服务端将原始数据转换为统一归档结构数据,并通过统一性接口将原始数据发送给数据库,实现了对不同数据类型原始数据的统一归档存储。
在上述实施例提供的基础上,对统一性服务端作进一步的优化。具体的,本实施例中主要对统一性服务端所包含的结构体和函数之间的关系进行详细的解释说明。
其中,统一性服务端至少配置下述结构:统一传输结构、统一归档结构和子归档结构;其中,子归档结构为统一归档结构的子结构;统一传输结构为统一性服务端接收原始数据的结构;统一归档结构为数据归档时用于实现统一性接口对应函数的结构;子归档结构为数据归档时的存储参数。在实施例中,为了便于对统一传输结构、统一归档结构和子归档结构进行描述说明,自定义统一传输结构为DeliverInput结构,统一归档结构为Item结构,子归档结构为BackupItem结构。其中,统一传输结构包括:数据标识号和提交时间,数据标识号为同一类型的原始数据进行分片后,每个分片数据的标识;提交时间为存储客户端向统一性服务端发送原始数据中每个分片数据的时间。统一归档结构至少包括:数据存储类型、后端队列的引用地址和目标存储介质的配置参数;数据存储类型为原始数据对应的数据类型;后端队列的引用地址为原始数据在队列中的地址信息;目标存储介质的配置参数为配置目标存储介质的参数信息;子归档结构至少包括:数据长度和归档状态,数据长度为原始数据的长度,归档状态表示原始数据的归档状态。
具体来说,DeliverInput结构为统一性服务端接收存储客户端投递原始数据所需要解析的结构;Item结构为归档时的主要对象,所有的方法(函数)均与Item对象有关,比如,在Item对象中包含数据存储的类型,包含后端队列的引用地址,归档数据存储介质的部分配置参数等;BackupItem为归档时数据类型,其为Item结构的子结构,包括存储的具体信息,比如,数据长度(size)和归档状态(归档status)等,主要与对象关系映射(ObjectRelational Mapping,ORM)存储字段相关。
进一步的,统一性服务端,还包括:数据传输控制器和数据查询控制器;其中,数据传输控制器用于处理存储客户端发送的携带原始数据的投递请求;数据查询控制器用于处理存储客户端的查询请求。可选地,可将数据传输控制器记为DeliverController,数据查询控制器记为QueryController。需要说明的是,DeliverController和QueryController均是利用了beego支持重写Controller方法的方式实现的,可通过DeliverController中的自定义方法Deliver()来处理存储客户端的投递请求,其中,该投递请求指的是向存储客户端向统一性服务端投递原始数据的请求。在实施例中,可通过QueryController中的自定义方法GetLatest()和GetCount()处理存储客户端的查询请求。其中,该查询请求可以为存储客户端向统一性服务端查询断点、查询数据是否投递的相关请求。
进一步的,统一性服务端,还包括:存储函数和接口函数;其中,存储函数为用于存储不同数据类型的原始数据的函数;接口函数为用于实现统一性接口的函数。可选地,可将存储函数记为store,接口函数记为interface。具体来说,store方法是Item结构的其中一个方法,对于不同类型的数据存储,需定义不同的store方法来进行相应的处理;interface也是Item结构的其中一个方法,目的是为了对不同类型的数据所对应的归档存储进行配置,从而用户在增加其它类型的数据进行存储时,可直接重写interface方法,就可以实现对不同类型数据的统一归档存储,进而实现了数据存储系统的扩展性。
进一步的,统一性服务端至少配置下述路由:记录查询路由、总数查询路由和投递路由,记录查询路由用于查询最近投递记录,总数查询路由用于查询最近投递的总数,投递路由为用于投递原始数据的接口。可选的,可将记录查询路由记为latest路由,总数查询路由记为period路由,投递路由记为deliver路由。相应的,上述路由的功能是用来数据的查询即,latest路由也可称为latest查询,period路由也可称为period查询,其中,采用上述实施例中的QueryController中的两个后端处理函数分别来处理latest查询和period查询。当然,由于deliver路由为用于投递原始数据的接口,即deliver路由也称为deliver投递接口。
进一步的,统一性服务端还用于监听HTTP端口,并将所有服务端路由绑定到预先配置的数据传输控制器和数据查询控制器。需要理解的是,在统一性服务端启动之后,可监听HTTP端口,以使所有服务端路由绑定到相应的控制器上。其中,服务端路由可为上述实施例描述的latest路由、period路由和deliver路由,当然,对此并不进行限定,可根据实际情况进行相应调整。具体的,将所有服务端路由绑定到预先配置的相应控制器上,可以理解为,不同的路由对应有不同的控制器,比如,latest路由和period路由需通过QueryController中的两个后端处理函数进行处理,则latest路由和period路由需绑定到数据查询控制器QueryController上。
进一步的,统一性服务端还用于配置每个数据类型的原始数据对应的目标存储介质,目标存储介质为每个数据类型的原始数据在数据库对应的存储位置。具体来说,在统一性服务端初始化之后,在接收到不同数据类型的原始数据时,将原始数据对应的相关数据结构填充为Item结构,并进行相关的目标存储介质的配置。可以理解为,不同数据类型的原始数据对应的目标存储介质也是不同的。示例性地,在原始数据的数据类型为Riak时,原始数据对应的目标存储位置为对象存储服务的S3接口(OSS/S3)的哈希桶(HASH bucket)位置;又如,在原始数据的数据类型为MySQL时,原始数据对应的目标存储位置为用于记录MySQL的数据更新的文件(比如,Binlog)和目录位置。
本实施例提供的技术方案,在上述实施例的基础上,通过对统一性服务端中的结构和方法进行不同配置,从而实现了统一性服务端对不同数据类型的原始数据的统一归档存储。
在上述实施例的基础上,对存储客户端作进一步的优化。具体的,本实施例中主要对存储客户端所包含的结构体和函数之间的关系进行详细的解释说明。
在实施例中,存储客户端还用于通过记录查询路由查询最近投递记录,并将原始数据定位在断点,以在断点继续投递原始数据。并且,存储客户端还用于通过记录查询路由查询最近投递记录,若无断点,则从头开始投递原始数据。
需要说明的是,不同的存储客户端向统一性客户端投递的原始数据的数据类型是不同的,可以理解为,不同的存储客户端所包含的结构和函数(方法)也是有所区别的。相应的,不同的存储客户端进行断点续传的具体实现过程也是有所区别的。
示例性地,以存储客户端为MySQL客户端为例,对断点续传的过程进行说明。图3是本发明实施例提供的一种断点续传的流程示意图。
如图3所示,MySQL客户端通过latest路由查询统一性服务端,以得到上次传输的断点,其中,断点可包括Binlog文件(比如,MySQL-bin.000001)以及Binlog事件的写入位置(比如,记为P),若返回文件为空,则表明这是一次新的投递,可直接从Binlog-000001开始;若返回文件为非空,则根据返回断点(比如,文件名为P)进行续传。在续传时,可根据Binlog事件的类型进行处理,若为轮换(Rotate)事件或格式描述(Format description)事件则忽略,并使用HTTP request投递到统一性服务端。需要理解的是,每个日志文件称为binlog文件,每个日志文件由很多个日志事件组成,每个日志文件都是以Format description事件开头并且以日志轮换事件作为文件结束。同时,由于MySQL Binlog事件具有先进先出(First Input First Output,FIFO)性质,因此在查询数据和投递数据之后,会使用开发语言Golang中的通道(channel)特性作为一个初始化队列进行处理,每出现一次数据库的操作,就会产生一个事件,并将此事件入队列,然后使用HTTP request投递至统一性服务端。
又如,以存储客户端为Riak客户端为例,对断点续传的过程进行说明。图4是本发明实施例提供的另一种断点续传的流程示意图。
如图4所示,Riak客户端通过latest路由查询最近投递数据,并通过period路由查询事件区间投递数,然后通过集群查询,查询时间t内写入总数,以及查询索引数据,根据索引数据查找原始数据,然后将写入总数和投递总数进行比对,以确定两者是否相同,若相同,表明投递完全;反之,表明未完全投递,此时需重新投递该集群中的原始数据。示例性地,假设将Riak客户端通过latest路由查询最近投递数据对应的返回值记为R1,若R1为空,表示这是一次新的投递以及处理;若R1为非空,用Go-Riak的应用程序编程接口(Application Programming Interface,API)进行Riak集群查询,以得到在R1时间内集群发出的数据量为V1,通过period查询在R1内统一性服务端接收到的数据量V2;然后将V1和V2进行比对,若V1>V2,表示R1时间内并未将所有的原始数据投递完全,此时需重新投递R1的数据;若V1=V2则表示该时间内投递完全,从R1的下一秒开始投递新的数据。
在此需要说明的是,用户在启动Riak客户端时,需输入用户参数,通过用户参数来指定这一次投递是从头开始还是从上一次最近一条投递记录开始,若发现之前没有投递记录,则默认从头开始,若用户输入的参数(比如,投递时间)不符合实际情况,则退出此次进程,以结束当前数据的投递。
进一步的,在存储客户端向统一性服务端投递数据之前,需查询生产集群,以得到不同类型的原始数据。具体来说,存储客户端还用于通过数据存储的开源句柄模块对生产集群进行查询,以得到不同类型的原始数据。同时,存储客户端还用于从生产集群查询预设时间内投递的原始数据的数据量,根据生产集群真实信息与投递信息确定投递结果,根据投递结果确定重新投递尚未投递的数据或在下一秒开始投递新的数据。示例性地,在存储客户端为Riak客户端时,可从生产环境的Riak-KV集群读取键值对数据,读取与键值对数据类似的hook index数据,其中,hook index类似于关系数据库中的索引,用于查找真实的数据,但是hook index与正常的KV数据有基本完全一样的格式。当Riak客户端读取原始数据后,通过查询和集群对比,选择应该投递的数据进行Goroutine投递。
Riak客户端在从集群查询某个时间t内投递的数据量,根据集群真实的信息与投递信息比较得出投递是否完全,根据此决定重新投递尚未投递完的数据抑或从下一秒开始投递新的数据。并且,Riak客户端也会读取hook_index(类似于索引),然后根据索引读取二进制或结构性数据。并且,Riak客户端查询hook_index,并根据hook_index查询数据,得到数据后加入待发送队列让工作线程发送这三个过程完全异步,采用goroutine和channel来相互通信。
在上述实施例提供的基础上,对数据库作进一步的优化。具体的,本实施例中主要对数据库所包含的结构体和函数之间的关系进行详细的解释说明。
其中,数据库包括判重函数、投递函数和更新函数;其中,判重函数用于判断原始数据是否重复投递;投递函数用于对新的原始数据进行投递;更新函数用于更新原始数据在数据库中的投递结果。
在实施例中,可将判重函数、投递函数和更新函数分别记为is_exist(),add_deliver()和update_deliver()。其中,判重函数、投递函数和更新函数均为Item对象中的方法。具体来说,通过Item对象调用is_exist(),其中,is_exist()内部执行了ORM操作数据库查询,通过检查并检查数据库(DB)内部是否有Item对象对应的数据,若存在,则返回False,上层函数直接返回。需要理解的是,对Item对象对应的数据进行判重,是为了防止上一次投递某个时刻t未完成,此时,存储客户端需重新投递t时刻的数据,但是部分t时刻的数据已经进入了server数据库,此时需忽略t时刻内已经投递的数据,直到t时刻的某个数据开始,该数据为数据库中新的数据时,就可认为上次t时刻未投递完的数据应该从此处重新开始投递新的数据。若不存在Item对象对应的数据,则可进入下一步操作,即通过Item对象中的Add_deliver()方法,将新的数据添加至月表中,具体来说,需调用ORM中的方法开启事务,然后插入一条数据到归档月表,若插入发生异常,则执行数据库回滚(rollback);然后在归档数据表中插入一条新的数据,并将投递总数量执行加1操作,表示成功接收到存储客户端的数据并进行了投递操作;若其中出现异常则执行数据库回滚操作,并结束事务。其中,归档月表为用于记录每个月各种数据存储归档汇总情况的统计表。
其中,Update_deliver()的调用在store内部,store根据数据存储的类型作相应的操作,但最后应该统一调用update_deliver(),在其中开启事务,向归档数据表中更新之前插入的数据,表明该插入的数据验证成功,并且被成功归档,然后结束事务。
进一步的,数据库用于在接收到统一归档结构的数据之后,确定统一归档结构的数据的投递结果,并根据投递结果返回投递标识值。
进一步的,数据库根据归档结构数据的数据类型调用对应的归档配置参数,并通过归档配置参数对原始数据进行归档存储。
图5是本发明提供的一种数据库的归档存储过程的流程图。如图5所示,数据库对接收到的数据处理过程包括如下步骤:
S210、接收存储客户端投递的原始数据。
S220、判断原始数据对应的统一归档结构数据是否重复投递,若否,则执行步骤S230;若是,则执行步骤S260。
在实施例中,在接收到原始数据对应的Item结构数据之后,先判断这个Item结构数据是否已经投递,若已经投递,并存在于数据库中,则不需要重复投递,可直接执行步骤S260,即结束存储线程。
S230、开启事务处理,并执行投递操作。
在实施例中,若存储客户端投递的原始数据对应的Item结构数据并未进行投递,并存储于数据库中,则启动事务处理流程,即开启事务处理模块,若在开启事务处理模块的过程中发生错误则执行数据库回滚操作;若未发生错误,则先插入原始数据对应的Item结构数据,并且事务处理均通过goroutine异步并发处理,直至数据完成插入。
S240、增加投递操作记录。
在数据完成插入之后,通过事务更新操作记录,将此投递记录插入到数据库中,并在插入时间和插入执行操作之间建立对应关系,以便于后续查询数据。
S250、更新存储结果。
需要理解的是,在事务开启之后,更新数据存储的结果。具体来说,由于数据存储操作是使用gotoutine开启,其中,包含插入操作,因此在异步操作的结果返回之后,处理函数必须根据数据存储的返回值,事务更新数据存储结果(比如,成功或者失败)。
S260、结束存储线程。
本实施例的技术方案,通过对Item结构数据的判重操作,以及事务更新操作,实现了对原始数据的准确存储,避免重复存储,造成存储资源的浪费。
图6是本发明实施例提供的另一种数据存储系统的结构框图。如图6所示,本实施例中的数据存储系统包括:统一性服务端、两个存储客户端和数据库。其中,统一性服务端分别与存储客户端、数据库连接。
如图6所示,分别启动存储客户端和统一性服务端分,然后存储客户端查询最近投递记录,将即将投递的原始数据定位在断点,若即将投递的原始数据中不存在断点,则从头开始投递原始数据;而统一性服务端将接收到的原始数据记录实时写回数据库,并将接收到的原始数据可选的投递于不同的目标存储介质。
以存储客户端为MySQL客户端和Riak客户端为例,对数据存储系统的统一归档过程进行说明。具体来说,MySQL客户端和Riak客户端向统一性服务端发起投递请求,统一性服务端根据后端的控制逻辑处理接收到的投递请求,并通过JSON应答MySQL客户端和Riak客户端。同时,统一性服务端还可以通过公有云将不同类型的数据归档到对应的目标存储介质,比如,目标存储介质可以为云服务器(EC2/ECS),或者关系型数据库/S3接口/对象存储服务(RDB/S3/OSS)。
图7是本发明实施例提供的一种统一归档的处理结构图。如图7所示,存储客户端分别为Riak-KV、ElasticSearch、PostgreSQL和MySQL。可以理解为,不同的存储客户端向统一性服务端投递的原始数据的数据类型是不同的。在实施例中,通过不同存储客户端对自身所要投递的原始数据进行结构化,然后通过统一传输结构DeliverInput将原始数据发送至统一性服务端,然后统一性服务端通过自身配置的结构和方法对原始数据进行解析处理,以将原始数据转换为统一归档结构Item结构,并调用Item结构中的deliver方法,以调用对应的存储方法store对不同数据类型的原始数据进行归档存储,从而实现了对不同数据类型的原始数据的统一归档存储。
图8是本发明实施例提供的一种统一性服务端提供的投递路由接口的流程示意图。如图8所示,该投递路由接口的实现方法具体包括如下步骤:
S310、统一性服务端开启后监听HTTP端口,所有服务端路由均绑定到相应的控制器。
S320、判断存储客户端是否调用查询路由,若是,则执行步骤S330;若否,则执行步骤S340。
S330、对数据库进行读写,并返回查询值。
S340、根据路由绑定方法调用数据查询控制器,以解析得到统一传输结构数据。
S350、对统一传输结构数据进行解析,得到统一归档结构数据。
S360、调用统一归档结构中的接口函数。
S370、调用事务处理模块执行判重操作,以确定未重复投递。
S380、调用统一归档结构中的存储函数,以对原始数据进行统一归档存储。
具体来说,统一性服务端开启后监听HTTP端口,所有服务端路由都绑定到相应的控制器上,若存储客户端调用记录查询路由(latest接口)或者总数查询路由(period接口),则通过模型中的Item结构进行数据库读写,然后返回查询的值。若存储客户端调用投递路由(deliver),首先根据服务端路由绑定的方法进入DeliverController中的方法Deliver(),进入后首先通过parseFORM()将原始数据解析为新建的统一传输结构(DeliverInput),若参数有异常则返回400。然后调用模型中的方法NewItem(),以返回Item对象,其参数为DeliverInput结构的部分相关参数。然后调用Iterm中的方法config,其中,config为Item对象的interface方法,目的是为了对不同类型数据的归档进行相关配置。同时,用户增加数据存储可以重写config方法,从而实现了数据存储系统的扩展性。然后,调用Iterm结构中的Deliver(),进入Deliver之后,调用事务处理模块对投递数据执行判重和事务处理操作,然后调用Item结构中的判重函数is_exist(),并根据相应的判重结果进行处理。若非重复投递,则调用Item结构中的投递函数add_deliver(),在完成数据的投递之后,调用Item结构中的存储函数store()方法进行归档。如果成功归档,则调用Item结构中的更新函数update_deliver(),并记录数据的投递状态,从而完成了原始数据的归档存储。
值得注意的是,上述数据存储系统的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
以上仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (16)

1.一种数据存储系统,其特征在于,包括:统一性服务端、至少两个存储客户端、数据库和统一性接口;所述存储客户端与所述统一性服务端连接;所述统一性服务端通过所述统一性接口与所述数据库连接;
所述存储客户端用于将原始数据通过统一传输结构发送给所述统一性服务端;
所述统一性服务端用于将所述原始数据转换为统一归档结构数据后,通过所述统一性接口发送给所述数据库;
所述数据库根据所述统一归档结构数据的数据类型存储对应的原始数据。
2.根据权利要求1所述的系统,其特征在于,所述统一性服务端还用于配置每个数据类型的原始数据对应的目标存储介质,所述目标存储介质为每个数据类型的原始数据在所述数据库对应的存储位置。
3.根据权利要求1所述的系统,其特征在于,所述统一性服务端至少配置下述结构:统一传输结构、统一归档结构和子归档结构;所述子归档结构为所述统一归档结构的子结构;
所述统一传输结构为所述统一性服务端接收原始数据的结构;所述统一归档结构为数据归档时用于实现统一性接口对应函数的结构;所述子归档结构为数据归档时的存储参数。
4.根据权利要求3所述的系统,其特征在于,所述统一传输结构包括:数据标识号和提交时间,所述数据标识号为同一类型的原始数据进行分片后,每个分片数据的标识;所述提交时间为所述存储客户端向所述统一性服务端发送所述原始数据中每个分片数据的时间;
所述统一归档结构至少包括:数据存储类型、后端队列的引用地址和目标存储介质的配置参数;所述数据存储类型为原始数据对应的数据类型;所述后端队列的引用地址为所述原始数据在队列中的地址信息;所述目标存储介质的配置参数为配置目标存储介质的参数信息;
所述子归档结构至少包括:数据长度和归档状态,所述数据长度为所述原始数据的存储长度,所述归档状态表示所述原始数据的归档状态。
5.根据权利要求1所述的系统,其特征在于,所述统一性服务端,还包括:数据传输控制器和数据查询控制器;
所述数据传输控制器用于处理所述存储客户端发送的携带所述原始数据的投递请求;所述数据查询控制器用于处理所述存储客户端的查询请求。
6.根据权利要求1所述的系统,其特征在于,所述统一性服务端,还包括:存储函数和接口函数;
所述存储函数为用于存储不同数据类型的所述原始数据的函数;所述接口函数为用于实现所述统一性接口的函数。
7.根据权利要求1所述的系统,其特征在于,所述统一性服务端至少配置下述路由:记录查询路由、总数查询路由和投递路由,所述记录查询路由用于查询最近投递记录,所述总数查询路由用于查询最近投递的总数,所述投递路由为用于投递原始数据的接口。
8.根据权利要求5所述的系统,其特征在于,所述统一性服务端还用于监听超文本传输协议HTTP端口,并将所有服务端路由绑定到预先配置的所述数据传输控制器和所述数据查询控制器。
9.根据权利要求7所述的系统,其特征在于,所述存储客户端还用于通过所述记录查询路由查询最近投递记录,并将所述原始数据定位在断点,以在所述断点继续投递所述原始数据。
10.根据权利要求7所述的系统,其特征在于,所述存储客户端还用于通过所述记录查询路由查询最近投递记录,若无断点,则从头开始投递所述原始数据。
11.根据权利要求1-7任一所述的系统,其特征在于,所述存储客户端还用于通过数据存储的开源句柄模块对生产集群进行查询,以得到不同类型的原始数据。
12.根据权利要求1-7任一所述的系统,其特征在于,所述存储客户端还用于从生产集群查询预设时间内投递的所述原始数据的数据量,根据所述生产集群真实信息与投递信息确定投递结果,根据所述投递结果确定重新投递尚未投递的数据或在下一秒开始投递新的数据。
13.根据权利要求1-7任一所述的系统,其特征在于,所述数据库用于在接收到统一归档结构的数据之后,确定所述统一归档结构的数据的投递结果,并根据投递结果返回投递标识值。
14.根据权利要求1-7任一所述的系统,其特征在于,所述数据库包括:判重函数、投递函数和更新函数;
所述判重函数用于判断所述原始数据是否重复投递;所述投递函数用于对新的原始数据进行投递;所述更新函数用于更新原始数据在所述数据库中的投递结果。
15.根据权利要求1-7任一所述的系统,其特征在于,所述数据库根据归档结构数据的数据类型调用对应的归档配置参数,并通过所述归档配置参数对所述原始数据进行归档存储。
16.根据权利要求1-10任一所述的系统,其特征在于,所述统一性服务端基于模型-视图-控制器MVC模式。
CN201910726633.3A 2019-08-07 2019-08-07 一种数据存储系统 Pending CN110457380A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910726633.3A CN110457380A (zh) 2019-08-07 2019-08-07 一种数据存储系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910726633.3A CN110457380A (zh) 2019-08-07 2019-08-07 一种数据存储系统

Publications (1)

Publication Number Publication Date
CN110457380A true CN110457380A (zh) 2019-11-15

Family

ID=68485366

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910726633.3A Pending CN110457380A (zh) 2019-08-07 2019-08-07 一种数据存储系统

Country Status (1)

Country Link
CN (1) CN110457380A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111064782A (zh) * 2019-12-12 2020-04-24 腾讯科技(深圳)有限公司 传输数据的方法、装置、电子设备及存储介质
CN111159102A (zh) * 2019-12-20 2020-05-15 中国建设银行股份有限公司 非结构化数据归档方法、装置、设备及存储介质
CN114968214A (zh) * 2022-07-12 2022-08-30 云账户技术(天津)有限公司 代码自动生成方法、装置、存储介质及终端设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101814110A (zh) * 2009-02-25 2010-08-25 中国联合网络通信集团有限公司 数据归档方法和系统、前置机
CN106095964A (zh) * 2016-06-17 2016-11-09 浪潮软件股份有限公司 一种对数据进行可视化归档与搜索的方法
CN106296458A (zh) * 2016-08-15 2017-01-04 成都九鼎瑞信科技股份有限公司 水务数据处理方法、装置及水务数据采集系统
US20190121865A1 (en) * 2017-10-20 2019-04-25 Bank Of America Corporation System for synchronous document captures into an asynchronous archive and document-level archiving reconciliation
CN109726174A (zh) * 2018-12-28 2019-05-07 江苏满运软件科技有限公司 数据归档方法、系统、设备以及存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101814110A (zh) * 2009-02-25 2010-08-25 中国联合网络通信集团有限公司 数据归档方法和系统、前置机
CN106095964A (zh) * 2016-06-17 2016-11-09 浪潮软件股份有限公司 一种对数据进行可视化归档与搜索的方法
CN106296458A (zh) * 2016-08-15 2017-01-04 成都九鼎瑞信科技股份有限公司 水务数据处理方法、装置及水务数据采集系统
US20190121865A1 (en) * 2017-10-20 2019-04-25 Bank Of America Corporation System for synchronous document captures into an asynchronous archive and document-level archiving reconciliation
CN109726174A (zh) * 2018-12-28 2019-05-07 江苏满运软件科技有限公司 数据归档方法、系统、设备以及存储介质

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111064782A (zh) * 2019-12-12 2020-04-24 腾讯科技(深圳)有限公司 传输数据的方法、装置、电子设备及存储介质
CN111159102A (zh) * 2019-12-20 2020-05-15 中国建设银行股份有限公司 非结构化数据归档方法、装置、设备及存储介质
CN114968214A (zh) * 2022-07-12 2022-08-30 云账户技术(天津)有限公司 代码自动生成方法、装置、存储介质及终端设备
CN114968214B (zh) * 2022-07-12 2022-10-28 云账户技术(天津)有限公司 代码自动生成方法、装置、存储介质及终端设备

Similar Documents

Publication Publication Date Title
US11615084B1 (en) Unified data processing across streaming and indexed data sets
US11500875B2 (en) Multi-partitioning for combination operations
US11194552B1 (en) Assisted visual programming for iterative message processing system
US11474673B1 (en) Handling modifications in programming of an iterative message processing system
US10805213B2 (en) Controlling data communication between microservices
US10776441B1 (en) Visual programming for iterative publish-subscribe message processing system
US11886440B1 (en) Guided creation interface for streaming data processing pipelines
US11614923B2 (en) Dual textual/graphical programming interfaces for streaming data processing pipelines
US11151137B2 (en) Multi-partition operation in combination operations
US9971823B2 (en) Dynamic replica failure detection and healing
US11636116B2 (en) User interface for customizing data streams
US20100250648A1 (en) Client-server systems and methods for accessing metadata information across a network using proxies
KR20110110223A (ko) 선택적 데이터베이스 복제
CN110457380A (zh) 一种数据存储系统
US11574242B1 (en) Guided workflows for machine learning-based data analyses
CN108628881A (zh) 数据同步方法和装置
US12014255B1 (en) Generating machine learning-based outlier detection models using timestamped event data
CN112685499B (zh) 一种工作业务流的流程数据同步方法、装置及设备
US11663219B1 (en) Determining a set of parameter values for a processing pipeline
US11687487B1 (en) Text files updates to an active processing pipeline
US9262241B2 (en) Computer system, computer-implemented method and computer program product for sequencing incoming messages for processing at an application
US11675473B1 (en) User interface for summarizing data to generate previews of metric data
US20230385288A1 (en) User interface for customizing data streams and processing pipelines
JP7071938B2 (ja) データベース管理サービス提供システム
US10185735B2 (en) Distributed database system and a non-transitory computer readable medium

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination