CN109947733A - 数据存储装置与方法 - Google Patents

数据存储装置与方法 Download PDF

Info

Publication number
CN109947733A
CN109947733A CN201910248824.3A CN201910248824A CN109947733A CN 109947733 A CN109947733 A CN 109947733A CN 201910248824 A CN201910248824 A CN 201910248824A CN 109947733 A CN109947733 A CN 109947733A
Authority
CN
China
Prior art keywords
data
node
storage
leader node
leader
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
CN201910248824.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.)
Zhongan Information Technology Service Co Ltd
Original Assignee
Zhongan Information Technology Service 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 Zhongan Information Technology Service Co Ltd filed Critical Zhongan Information Technology Service Co Ltd
Priority to CN201910248824.3A priority Critical patent/CN109947733A/zh
Publication of CN109947733A publication Critical patent/CN109947733A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种数据存储方法与装置。该方法包括:领导节点获得数据的存储请求,基于存储请求,将数据依次存储进日志文件和内存表;领导节点向存储集群的至少一部分跟随节点发送存储请求,以获取来自至少一部分跟随节点对于存储请求的操作结果,其中至少一部分跟随节点的数目与指定的共识规则相关联;基于共识规则,领导节点确定操作结果的有效性。

Description

数据存储装置与方法
技术领域
本发明属于数据存储领域,尤其涉及高可靠低成本的键值(Key-Value,KV)存储装置与方法。
背景技术
KV数据存储是针对键值类型的数据存储方式。例如数据记录“得分:100”,这里可以将“得分”作为存储过程中的关键字key,与之相对应的值100则作为值value,使用“得分”作为索引关键字,获取相应的value值,即分数值100。
目前常用的KV存储系统(譬如,redis)属于内存型数据库,优点是数据读写速度快,适合对速度性能要求极高的应有场景,但同时其缺点是对内存要求高,其一旦存储数据量巨大,仅内存无法满足存储要求,并且内存成本要高很多,不适合数据量存储巨大但对速度要求不高的应用场景。
单机kv存储系统如leveldb,不能有效的实现数据的可靠性,一旦单机硬件或数据受损将无法恢复。
因此,亟需一种低计算机硬件要求、低成本、数据高可靠、去中心化的存储方法以及装置。
发明内容
针对上述问题,本发明提出了一种高可靠低成本的kv存储系统的实现方法。
本发明一方面提出了一种数据存储方法,包括:领导节点获得数据的存储请求,基于所述存储请求,将所述数据依次存储进日志文件和内存表;所述领导节点向存储集群的至少一部分跟随节点发送所述存储请求,以获取来自所述至少一部分跟随节点对于所述存储请求的操作结果,其中,所述领导节点处于所述存储集群中,并且所述至少一部分跟随节点的数目与指定的共识规则相关联;基于所述共识规则,所述领导节点确定所述操作结果的有效性。
在一种实施方式中,该方法包括将所述数据存储进所述日志文件成功后,再将所述数据存储进所述内存表。
在一种实施方式中,当所述内存表中的数据所占用的存储空间大于指定阈值时,将所述内存表中的数据持久化到数据库中。
在一种实施方式中,将所述内存表中的数据持久化到数据库中包括:以指定的顺序将所述数据插入到所述数据库中的有序表中,其中,所述有序表包括经持久化的多笔数据。
在一种实施方式中,所述指定的顺序与所述数据的关键字相关联。
在一种实施方式中,该方法还包括:当所述操作结果被确定为有效时,所述领导节点向所述至少一部分跟随节点发送第一通知信息,以通知所述至少一部分跟随节点将所述日志文件中的所述数据的存储状态设置为有效;当所述操作结果被确定为无效时,所述领导节点向所述至少一部分跟随节点发送第二通知信息,以通知所述至少一部分跟随节点在所述日志文件中取消对所述数据的存储。
在一种实施方式中,所述领导节点还通过所述第二通知信息通知所述至少一部分跟随节点将所述日志文件恢复到在存储所述数据之前的状态。
在一种实施方式中,当所述操作结果被确定为有效时,所述领导节点向所述存储集群的其它节点发送第三通知信息,以通知所述其它节点在日志中存储所述数据,并将所述数据的存储状态设置为有效。
本发明另一方面提出了一种信息处理装置,包括:处理器;以及存储器,其用于存储指令,当所述指令在执行时使得所述处理器执行如前述的任一项方法。
通过执行本发明的技术方案,可以实现无主节点的kv数据存储集群,保证数据高可靠性,可用数据节点超过一半则不影响集群服务,同时保证数据一致性,少数节点错误不影响数据最终结果。另外,使用有形存储介质作为数据主要存储载体,并且提供数据压缩功能,可以有效降低设备性能要求,从而降低成本。扩展了KV类型数据存储在互联网系统中使用的场景。
附图说明
参考附图示出并阐明实施例。这些附图用于阐明基本原理,从而仅仅示出了对于理解基本原理必要的方面。这些附图不是按比例的。在附图中,相同的附图标记表示相似的特征。
图1为依据本发明实施例的存储集群的架构示意图;
图2为依据本发明实施例的数据处理流程图;
图3为依据本发明实施例的数据处理装置的示意图。
具体实施方式
在以下优选的实施例的具体描述中,将参考构成本发明一部分的所附的附图。所附的附图通过示例的方式示出了能够实现本发明的特定的实施例。示例的实施例并不旨在穷尽根据本发明的所有实施例。可以理解,在不偏离本发明的范围的前提下,可以利用其他实施例,也可以进行结构性或者逻辑性的修改。因此,以下的具体描述并非限制性的,且本发明的范围由所附的权利要求所限定。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
本发明提出在去中心化的存储集群中实现高效存储的方法。下面对存储集群的配置进行阐述。
图1为依据本发明实施例的存储集群的架构示意图。
如图1所示,对于存储集群,需要各个节点投票选举领导节点(leader)。每个节点为一个kv数据存储单元,具有数据库的数据读、写、删除接口,以及保持节点一致性等功能。每个节点均包括本地数据库,譬如,DB10-DB30。
为避免选举没有结果,若选举的规则为选票超过一半时选举有效,此时存储集群中需要包括2n+1个节点,其中n大于等于1。可以理解的,若选举规则为选票超过三分之一即可,则存储集群中的节点为3n个。
下面以选举的规则为选票超过一半时选举有效为例进行阐述。此时存储集群包括2n+1个节点,每个节点通过配置文件实现网络连通,节点之间相互连通实现存储集群。
存储集群在对外提供服务之前,可以通过指定的算法确定领导节点,该领导节点提供对外服务,提供客户端CT的数据操作功能,存储集群中的其他节点则为跟随节点(follower)。具体而言,领导节点配置为处理与客户端交互、日志复制等操作;跟随节点则是用来基于来自领导节点的指令来处理数据,可以理解的,跟随节点所处理的数据同样来自于领导节点。
结合图1,存储集群中的各个节点的初始状态为跟随节点,并且每个跟随节点均具备状态转换机制。当一个跟随节点(譬如,节点10)率先进行了状态转换时,节点10将向节点20、30发送选举请求,以请求该两个节点选择节点10作为领导节点。当节点20和/或30同意时,就存在至少两个节点(包括节点10自身)同意选择节点10作为领导节点。
以复制日志来阐述节点10-30的工作机制。
在初始状态,节点10和另外两个节点上不存在数据。客户端发送请求给节点10,以请求储存数据data1,节点10先将数据data1存储在本地日志文件中,但此时数据data1处于未确认状态。然后,节点10向另外两个节点发送复制日志请求。若节点20、30能够顺利执行该复制操作,则将数据data1暂时性地存储在各自的本地日志文件。此时,节点20、30上的数据也是处于未确认状态。该两个节点将数据写到本地后,向节点10返回存储成功的消息。只要节点10收到的成功的返回数量超过半数(包含节点10自身),节点10将数据data1的状态改成已确认,然后告知客户端存储成功。接着,节点10再次给其它节点发送复制日志请求,节点20、30将本地在收到请求后,将日志里的数据data1的状态修改为已确认,从而使该三个节点的数据是一致的。
因此,通过将存储集群进行去中心化处理,能够体现在不同节点之间的数据一致性。客户端发送请求到任何一个节点都能收到一致的返回,当一个节点出故障后,其他节点仍然能以已有的数据正常进行。
由上可知,当节点20或30产生故障了,也不会影响存储集群对数据的存储,因此,该存储集群具备一定的容错能力。
请同时参阅图1、2,图2为依据本发明实施例的数据处理流程图。
步骤S201:领导节点接收到来自客户端的数据存储请求。
在该步骤中,当客户端向存储集群发送数据存储请求时,该请求会首先到达领导节点,然后领导节点将该请求添加到本地数据库中。可以理解的,该数据存储请求包括待存储的数据。在另一种实施方式中,存储请求也可以和待存储的数据分别进行传送。
具体而言,当领导节点存储KV类型的数据的时候,领导节点会先往日志(log)文件里写入数据,成功后将该数据写入指定数据结构的内存表Table1中。可以理解的,上述写入操作只涉及一次有形存储介质写入和一次内存写入,所以具有较快的写入速度。
通过将数据存储在日志文件L1中,可以避免数据的丢失。如果没有日志文件,写入的数据刚开始是保存在内存表Table1中的。此时如果系统崩溃,内存表中的数据还没有来得及转移/写入到有形存储介质,从而造成数据丢失。在本实施例中,先将数据存储到日志文件L1中,然后再记入内存表Table1中,这样即使系统崩溃,也可以从日志文件L1中恢复内存表Table1所记录的内容,从而不会造成数据的丢失。
当内存表中的数据占用内存达到指定的阈值后,需要将内存表中的数据导出到外存文件中,并会生成新的日志文件L2和内存表Table2,而原先的内存表Table1则只能以读取的方式进行访问,而不能进行删除或写入。后续接收到的数据则被记入日志文件L2和内存表Table2中。对于内存表Table1中的数据则被持久化到数据库中(即,导出到有形存储介质中),与有形存储介质中当前存在的有序表内容以指定的顺序排序,并插入到有序表文件中,或者形成一个新的有序数据表文件。可以理解的,有序数据表包括来自内存中的经持久化的多笔的数据。
在一种实施方式中,有序数据表中的数据根据关键字来进行排序。譬如,在有序数据表中,关键字较小的数据排在关键字较大的数据之前。对于多笔数据,在本实施例中,利用主索引文件记录有序表分片信息,例如关键字为a~f开头的数据存储在有序表1中,关键字为g~s开头的数据存储在有序表2中。
基于上述配置,在一个实施方式中,可以依照以下步骤进行读取,(1)从内存表中尝试获得数据;(2)如果内存表中不存在该数据,则从处于只读状态的内存表中尝试获得数据;(3)如果处于只读状态的内存表中也不存在该数据,则通过主索引表,查找所要读取的数据的关键字在哪个有序数据表中,然后到有序数据表中获取数据。
步骤S202:领导节点向跟随节点发送所接收到的数据存储请求。
在该步骤中,领导节点可以通过与跟随节点之间的心跳机制,向跟随节点提供所接收到的数据存储请求。领导节点向存储集群的至少一部分跟随节点发送该数据存储请求,以获取来自该至少一部分跟随节点对于所述存储请求的操作结果,其中该至少一部分跟随节点的数目与指定的共识规则相关联。在一种实施方式中,领导节点向存储集群的其它跟随节点发送该数据存储请求,从而获取来自该些跟随节点的操作结果。
以存储集群有5个节点为例。当有两个跟随节点投票确认存储操作没问题时,可使得领导节点确认该操作有效。因此,领导节点可以选择性地从4个跟随节点中选择2或3个节点发送所接收到的存储请求。若被选中的跟随节点中有2个跟随节点确认该操作有效,则存储集群中有3个节点(包括领导节点)确认该操作有效,进而通过对该操作结果的共识。
当通过对该操作结果的共识后,领导节点可以向其他节点(即未选中的节点)发送通知信息,以通知该些节点在日志中存储该数据。
跟随节点将所获得的数据写入自己的数据库中。与领导节点类似的,跟随节点也将来自领导节点的数据先往log文件里存储,成功后将该数据存储指定数据结构的内存表中。
可以理解的,领导节点可以根据共识规则来选择相应数目的跟随节点来进行共识。若共识规则是2n+1个节点中有n个节点确认即可,则领导节点可以从集群中选择1或2个节点对操作结果进行共识。
S203:领导节点获取来自跟随节点的操作结果,并确定数据存储操作的有效性。
在该步骤中,领导节点收集来自跟随节点的操作结果,如果超过一半节点均返回操作结果有效的信息,则本次数据存储的操作有效;反之,本次数据存储的操作无效。
具体而言,当操作结果被确定为有效时,领导节点向跟随节点发送第一通知信息,以通知跟随节点将日志文件中的数据的存储状态设置为有效;当操作结果被确定为无效时,导节点向跟随节点发送第二通知信息,以通知跟随节点在日志文件中取消对该数据的存储。
在一种实施方式中,当操作结果无效时,领导节点将向跟随节点发送回滚信息,跟随节点响应于该回滚信息,执行回滚操作,以恢复到前一个状态,即恢复到对该数据的存储之前的状态。
通过上述技术方案,可以实现无主节点的kv类型数据存储,保证数据高可靠性,可用数据节点超过规定的阈值则不影响存储集群服务。另外,使用有形存储介质作为数据主要存储载体,并且提供数据压缩功能,可以有效降低设备性能要求,从而降低成本。
图3为依据本发明实施例的数据处理装置的示意图。
数据处理装置300包括处理器310以及存储器320,其中,该存储器320用来存储指令。当该指令在执行时,能够使得处理器310执行如前述的方法,在此不再赘述。
上述的部署方法的流程还代表机器可读指令,该机器可读指令包括由处理器执行的程序。该编程指令存储于有形存储介质上,如磁盘、闪存、只读存储器(ROM)、光盘(CD)、数字通用光盘(DVD)、高速缓存器、随机访问存储器(RAM)和/或任何其他存储介质,在该存储介质上信息可以存储任意时间(例如,长时间,永久地,短暂的情况,临时缓冲,和/或信息的缓存)。如在此所用的,该术语有形计算机可读介质被明确定义为包括任意类型的计算机可读存储的信息。附加地或替代地,可利用编码指令(如计算机可读指令)实现图2中的示例过程,该编码指令存储于非暂时性计算机可读介质,在该存储介质信息可以存储任意时间。可以理解的,该计算机可读指令还可以存储在网络服务器中、云端平台上,以便于用户使用。
另外,尽管操作以特定顺序被描绘,但这并不应该理解为要求此类操作以示出的特定顺序或以相继顺序完成,或者执行所有图示的操作以获取期望结果。在某些情况下,多任务或并行处理会是有益的。同样地,尽管上述讨论包含了某些特定的实施细节,但这并不应解释为限制任何发明或权利要求的范围,而应解释为对可以针对特定发明的特定实施例的描述。本说明书中在分开的实施例的上下文中描述的某些特征也可以整合实施在单个实施例中。反之,在单个实施例的上下文中描述的各种特征也可以分离地在多个实施例或在任意合适的子组合中实施。

Claims (9)

1.一种数据存储方法,包括:
领导节点获得数据的存储请求,基于所述存储请求,将所述数据依次存储进日志文件和内存表;
所述领导节点向存储集群的至少一部分跟随节点发送所述存储请求,以获取来自所述至少一部分跟随节点对于所述存储请求的操作结果,其中,所述领导节点处于所述存储集群中,并且所述至少一部分跟随节点的数目与指定的共识规则相关联;
基于所述共识规则,所述领导节点确定所述操作结果的有效性。
2.如权利要求1所述的方法,其中,将所述数据存储进所述日志文件成功后,再将所述数据存储进所述内存表。
3.如权利要求2所述的方法,其中,当所述内存表中的数据所占用的存储空间大于指定阈值时,将所述内存表中的数据持久化到数据库中。
4.如权利要求3所述的方法,将所述内存表中的数据持久化到数据库中包括:
以指定的顺序将所述数据插入到所述数据库中的有序表中,其中,所述有序表包括经持久化的多笔数据。
5.权利要求4所述的方法,其中,所述指定的顺序与所述数据的关键字相关联。
6.如权利要求2所述的方法,还包括:
当所述操作结果被确定为有效时,所述领导节点向所述至少一部分跟随节点发送第一通知信息,以通知所述至少一部分跟随节点将所述日志文件中的所述数据的存储状态设置为有效;
当所述操作结果被确定为无效时,所述领导节点向所述至少一部分跟随节点发送第二通知信息,以通知所述至少一部分跟随节点在所述日志文件中取消对所述数据的存储。
7.如权利要求6所述的方法,其中,所述领导节点还通过所述第二通知信息通知所述至少一部分跟随节点将所述日志文件恢复到在存储所述数据之前的状态。
8.如权利要求6所述的方法,其中,当所述操作结果被确定为有效时,所述领导节点向所述存储集群的其它节点发送第三通知信息,以通知所述其它节点在日志中存储所述数据,并将所述数据的存储状态设置为有效。
9.一种信息处理装置,包括:
处理器;以及
存储器,其用于存储指令,当所述指令在执行时使得所述处理器执行如权利要求1至8中任一项所述的方法。
CN201910248824.3A 2019-03-29 2019-03-29 数据存储装置与方法 Pending CN109947733A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910248824.3A CN109947733A (zh) 2019-03-29 2019-03-29 数据存储装置与方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910248824.3A CN109947733A (zh) 2019-03-29 2019-03-29 数据存储装置与方法

Publications (1)

Publication Number Publication Date
CN109947733A true CN109947733A (zh) 2019-06-28

Family

ID=67012929

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910248824.3A Pending CN109947733A (zh) 2019-03-29 2019-03-29 数据存储装置与方法

Country Status (1)

Country Link
CN (1) CN109947733A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112965945A (zh) * 2019-12-13 2021-06-15 阿里巴巴集团控股有限公司 数据存储方法、装置、电子设备及计算机可读介质
CN113742336A (zh) * 2021-02-09 2021-12-03 北京沃东天骏信息技术有限公司 一种数据处理方法及设备、存储介质

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105426439A (zh) * 2015-11-05 2016-03-23 腾讯科技(深圳)有限公司 一种元数据的处理方法和装置
CN105512266A (zh) * 2015-12-03 2016-04-20 曙光信息产业(北京)有限公司 一种实现分布式数据库操作一致性的方法及装置
CN106708713A (zh) * 2016-12-12 2017-05-24 深圳市中博睿存科技有限公司 日志文件的写入方法及装置
CN107105032A (zh) * 2017-04-20 2017-08-29 腾讯科技(深圳)有限公司 节点设备运行方法及节点设备
CN107295080A (zh) * 2017-06-19 2017-10-24 北京百度网讯科技有限公司 应用于分布式服务器集群的数据存储方法和服务器
CN107807797A (zh) * 2017-11-17 2018-03-16 北京联想超融合科技有限公司 数据写入的方法、装置及服务器
CN107908370A (zh) * 2017-11-30 2018-04-13 新华三技术有限公司 数据存储方法及装置
CN108304142A (zh) * 2017-12-29 2018-07-20 杭州华为数字技术有限公司 一种数据管理方法和装置
CN108427728A (zh) * 2018-02-13 2018-08-21 百度在线网络技术(北京)有限公司 元数据的管理方法、设备及计算机可读介质
CN109525636A (zh) * 2018-10-12 2019-03-26 上海保险交易所股份有限公司 基于Raft算法的区块链共识方法

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105426439A (zh) * 2015-11-05 2016-03-23 腾讯科技(深圳)有限公司 一种元数据的处理方法和装置
CN105512266A (zh) * 2015-12-03 2016-04-20 曙光信息产业(北京)有限公司 一种实现分布式数据库操作一致性的方法及装置
CN106708713A (zh) * 2016-12-12 2017-05-24 深圳市中博睿存科技有限公司 日志文件的写入方法及装置
CN107105032A (zh) * 2017-04-20 2017-08-29 腾讯科技(深圳)有限公司 节点设备运行方法及节点设备
CN107295080A (zh) * 2017-06-19 2017-10-24 北京百度网讯科技有限公司 应用于分布式服务器集群的数据存储方法和服务器
CN107807797A (zh) * 2017-11-17 2018-03-16 北京联想超融合科技有限公司 数据写入的方法、装置及服务器
CN107908370A (zh) * 2017-11-30 2018-04-13 新华三技术有限公司 数据存储方法及装置
CN108304142A (zh) * 2017-12-29 2018-07-20 杭州华为数字技术有限公司 一种数据管理方法和装置
CN108427728A (zh) * 2018-02-13 2018-08-21 百度在线网络技术(北京)有限公司 元数据的管理方法、设备及计算机可读介质
CN109525636A (zh) * 2018-10-12 2019-03-26 上海保险交易所股份有限公司 基于Raft算法的区块链共识方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112965945A (zh) * 2019-12-13 2021-06-15 阿里巴巴集团控股有限公司 数据存储方法、装置、电子设备及计算机可读介质
CN113742336A (zh) * 2021-02-09 2021-12-03 北京沃东天骏信息技术有限公司 一种数据处理方法及设备、存储介质

Similar Documents

Publication Publication Date Title
EP3806424A1 (en) File system data access method and file system
CN102708165B (zh) 分布式文件系统中的文件处理方法及装置
CN106648959A (zh) 数据存储的方法和存储系统
CN106406758A (zh) 一种基于分布式存储系统的数据处理方法及存储设备
CN103986694B (zh) 分布式计算机数据存储系统中多副本一致性的控制方法
CN105183400B (zh) 一种基于内容寻址的对象存储方法和系统
CN107436725A (zh) 一种数据写、读方法、装置及分布式对象存储集群
CN111339078A (zh) 数据实时存储方法、数据查询方法、装置、设备、介质
CN109800185B (zh) 一种数据存储系统中的数据缓存方法
EP2710477B1 (en) Distributed caching and cache analysis
EP2879040A1 (en) Data storage method, data storage apparatus, and storage device
US8135918B1 (en) Data de-duplication for iSCSI
CN103885895A (zh) 容错集群存储系统中的写入性能
CN107209714A (zh) 分布式存储系统及分布式存储系统的控制方法
US20170364273A1 (en) Consensus protocol enhancements for supporting flexible durability options
CN106126374B (zh) 数据写入方法、数据读取方法及装置
CN107066498A (zh) 键值kv存储方法和装置
CN108228390B (zh) 数据回档方法及装置
CN113377292B (zh) 一种单机存储引擎
CN110019050A (zh) 一种数据回滚方法、系统、设备及计算机可读存储介质
CN110196818A (zh) 缓存数据的方法、缓存设备和存储系统
US9380127B2 (en) Distributed caching and cache analysis
CN109947733A (zh) 数据存储装置与方法
CN110413694A (zh) 元数据管理方法及相关装置
CN106897338A (zh) 一种针对数据库的数据修改请求处理方法及装置

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20190628

RJ01 Rejection of invention patent application after publication