CN107807787B - 一种分布式数据存储方法和*** - Google Patents
一种分布式数据存储方法和*** Download PDFInfo
- Publication number
- CN107807787B CN107807787B CN201610810580.XA CN201610810580A CN107807787B CN 107807787 B CN107807787 B CN 107807787B CN 201610810580 A CN201610810580 A CN 201610810580A CN 107807787 B CN107807787 B CN 107807787B
- Authority
- CN
- China
- Prior art keywords
- data
- node
- data block
- write operation
- tree structure
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种分布式数据存储方法和***,数据的存储单位是给定长度的数据块,并且所述数据被组织成树形结构,对数据的每个写操作请求对应所述树形结构的一个节点,该方法包括:接收写操作请求,写操作请求包括待写数据长度;确定写操作请求对应的树形结构中的节点,当待写数据长度不超出写操作请求对应的节点所在的数据块的剩余空间,则锁定该数据块并执行该写操作,否则根据待写数据长度分配一个或多个新数据块并把以该节点为根的子树迁移到所分配的新数据块,在该节点原来所在的数据块中设置链接指示该子树的位置,锁定新数据块并执行该写操作。
Description
技术领域
本发明涉及计算机和计算机软件技术领域,特别地涉及一种分布式数据存储方法和***。
背景技术
在电商业务蓬勃发展的今天,越来越多的经营者采用电商作为其重要的销售渠道,甚至是唯一的销售渠道。更多的消费者通过电商获取其需要的各式各样的生活必需品,以满足日常需求、提升生活质量。需求促进生产,旺盛的需求促使更多更好的商品及其销售活动的出现,于是,如何更好的管理、处理这些商品数据成为电商不得不重视的问题。
从目前电商公布的数据来看,现有的活跃商品数据已经是数十亿计,加上历史的数据,这将是一个非常海量的数据,利用传统的数据存储方法来处理这个数量级的数据,已经越来越笨重,越来越力不从心。
现有常用的数据存储技术主要分为关系数据库管理***RDBMS(RelationalDatabase Management System)和多种不同于RDBMS的新型的数据存储技术NoSql两大类。
其中,RDBMS是传统的关系型数据库解决方案,主要包括Oracle、MySql等;NoSql解决方案主要包括HBase、MongoDB等。
但是,现有常用的数据存储技术存在一定的技术瓶颈,主要表现在:
1、传统数据库RDBMS的主要缺点在于:小尺寸(百万级)数据量已经是其处理的极限,更大的数据量将使其处理性能急剧下降。传统数据库场景下,对于更大的数据量,一种业界经常采用的解决方案是分库分表,即:将目标数据分成多份存储,虽然单服务节点处理的数据依然有限,但是通过构筑更多的节点可以提高能处理的数据量。但是这种分库分表方案只能稍微的缓解问题,本身存在着底层存储结构对用户不透明等问题,更严重的是跨越多个数据节点的连接查询、分布式事务都成为一个现实难题甚至是不可能(比如MySql);
2、NoSql天生为处理大数据而设计,但是NoSql有其特定的适用场景,例如:对于hbase,只支持以Row Key为关键字的随机读取,显然这不能满足电商业务的多样化读取需求;对于MongoDB,它以文档document的形式存储数据,当数据增加进而需要申请更多空间时,性能将急速退化;
3、更重要的是,传统的关系型数据库和NoSql对数据的生命周期没有作考虑。传统的数据解决方案(包括关系型数据库和新兴的NoSql方案)没有考虑到数据的生命周期,无用的垃圾数据、历史数据和热数据(根据广大的软件***开发实践,从数据使用的角度,少量的活跃数据,会在短时间内被频繁、反复的访问,包括读取、更新等,这部分数据我们称之为热数据)存储在一起,导致了***空间的极大浪费,更影响了基于数据预读的各种加速技术的使用。当数据激增时,存取效率退化的现象非常惊人。
发明内容
有鉴于此,本发明提供一种分布式数据存储方法和***,基于树的逻辑结构组织数据块,能够以子树的纬度对数据进行冷热处理。
为实现上述目的,根据本发明的一个方面,提供了一种分布式数据存储方法。
一种分布式数据存储方法,所述数据的存储单位是给定长度的数据块,并且所述数据被组织成树形结构,对所述数据的每个写操作请求对应所述树形结构的一个节点,所述方法包括:接收写操作请求,所述写操作请求包括待写数据长度;确定所述写操作请求对应的所述树形结构中的节点,当所述待写数据长度不超出所述写操作请求对应的节点所在的数据块的剩余空间,则锁定该数据块并执行该写操作,否则根据待写数据长度分配一个或多个新数据块并把以该节点为根的子树迁移到所分配的新数据块,在该节点原来所在的数据块中设置链接指示该子树的位置,锁定所述新数据块并执行该写操作,其中,当接收所述写操作请求时,该写操作请求对应的节点不是当前树形结构中已有节点而是要新增加的节点,并且当该节点不是所述树形结构的根节点时,以该节点的直接父节点所在的数据块作为该节点所在的数据块,当该节点是所述树形结构的根节点时,分配新数据块作为该节点所在的数据块。
可选地,所述树形结构的每个节点具有唯一的标识,且子节点的标识包括该子节点的直接父节点的标识。
可选地,在所述树形结构的节点中设置数据年龄和冷热分值,并根据对数据的存取来统计所述数据冷热分值,定期根据数据年龄和冷热分值把满足设定阈值的冷数据导出到后备存储。
可选地,利用多个数据服务器管理所述数据块,并且利用管理服务器确定写操作对应的节点所在的数据块和管理该数据块的数据服务器,当为子树分配的新数据块的位置与其所在树形结构的父节点的数据块在同一数据服务器内的相同数据块时,通过所述新数据块与数据块头地址的块内偏移量进行节点的定位;当为子树分配的新数据块的位置与其所在树形结构的父节点的数据块在同一管理服务器管理的非同一数据服务器内时,通过所述管理服务器进行节点的定位;当为子树分配的新数据块的位置与其所在树形结构的父节点的数据块不在同一管理服务器管理的数据服务器内时,通过读取所述新数据块的外部地址来进行节点的定位。
可选地,若写操作对应的节点在同一管理服务器管理的数据服务器内,则由该管理服务器负责执行所述业务操作;若所述写操作对应的节点不在同一管理服务器管理的数据服务器内,则所述业务操作所涉及的多个管理服务器先选举出一个用于协调响应业务操作的主管理服务器,再由该主管理服务器协调其他的管理服务器执行所述业务操作;其中,***中所有管理服务器的存活情况和主从拓扑结构通过协调服务器集群来维护。
根据本发明的另一方面,提供了一种分布式数据存储***。
一种分布式数据存储***,所述数据的存储单位是给定长度的数据块,并且所述数据被组织成树形结构,对所述数据的每个写操作请求对应所述树形结构的一个节点,所述***包括:请求接收模块,用于接收写操作请求,所述写操作请求包括待写数据长度;节点确定模块,用于确定所述写操作请求对应的所述树形结构中的节点,当所述待写数据长度不超出所述写操作请求对应的节点所在的数据块的剩余空间,则锁定该数据块并执行该写操作,否则根据待写数据长度分配一个或多个新数据块并把以该节点为根的子树迁移到所分配的新数据块,在该节点原来所在的数据块中设置链接指示该子树的位置,锁定所述新数据块并执行该写操作,其中,当接收所述写操作请求时,该写操作请求对应的节点不是当前树形结构中已有节点而是要新增加的节点,并且当该节点不是所述树形结构的根节点时,以该节点的直接父节点所在的数据块作为该节点所在的数据块,当该节点是所述树形结构的根节点时,分配新数据块作为该节点所在的数据块。
可选地,所述树形结构的每个节点具有唯一的标识,且子节点的标识包括该子节点的直接父节点的标识。
可选地,在所述树形结构的节点中设置数据年龄和冷热分值,并根据对数据的存取来统计所述数据冷热分值,定期根据数据年龄和冷热分值把满足设定阈值的冷数据导出到后备存储。
可选地,利用多个数据服务器管理所述数据块,并且利用管理服务器确定写操作对应的节点所在的数据块和管理该数据块的数据服务器,当为子树分配的新数据块的位置与其所在树形结构的父节点的数据块在同一数据服务器内的相同数据块时,通过所述新数据块与数据块头地址的块内偏移量进行节点的定位;当为子树分配的新数据块的位置与其所在树形结构的父节点的数据块在同一管理服务器管理的非同一数据服务器内时,通过所述管理服务器进行节点的定位;当为子树分配的新数据块的位置与其所在树形结构的父节点的数据块不在同一管理服务器管理的数据服务器内时,通过读取所述新数据块的外部地址来进行节点的定位。
可选地,若写操作对应的节点在同一管理服务器管理的数据服务器内,则由该管理服务器负责执行所述业务操作;若所述写操作对应的节点不在同一管理服务器管理的数据服务器内,则所述业务操作所涉及的多个管理服务器先选举出一个用于协调响应业务操作的主管理服务器,再由该主管理服务器协调其他的管理服务器执行所述业务操作;其中,***中所有管理服务器的存活情况和主从拓扑结构通过协调服务器集群来维护。
根据本发明的又一方面,提供了一种分布式数据存储***。
一种分布式数据存储***,所述数据的存储单位是给定长度的数据块,并且所述数据被组织成树形结构,对所述数据的每个写操作请求对应所述树形结构的一个节点,其特征在于,所述***包括:存储器和处理器,其中,所述存储器存储指令;所述处理器执行所述指令用于:接收写操作请求,所述写操作请求包括待写数据长度;确定所述写操作请求对应的所述树形结构中的节点,当所述待写数据长度不超出所述写操作请求对应的节点所在的数据块的剩余空间,则锁定该数据块并执行该写操作,否则根据待写数据长度分配一个或多个新数据块并把以该节点为根的子树迁移到所分配的新数据块,在该节点原来所在的数据块中设置链接指示该子树的位置,锁定所述新数据块并执行该写操作,其中,当接收所述写操作请求时,该写操作请求对应的节点不是当前树形结构中已有节点而是要新增加的节点,并且当该节点不是所述树形结构的根节点时,以该节点的直接父节点所在的数据块作为该节点所在的数据块,当该节点是所述树形结构的根节点时,分配新数据块作为该节点所在的数据块。
根据本发明的又一方面,提供了一种分布式数据存储设备。
一种分布式数据存储设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明所提供的分布式数据存储方法。
根据本发明的再一方面,提供了一种计算机可读介质。
一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明所提供的分布式数据存储方法。
根据本发明的技术方案,根据数据的内在特征,通过树形结构存储数据,保证了具有亲子关系的数据块可以就近存储;内部节点的唯一标识采用前缀树结构进行编码,以实现仅需通过有限的计算就能对节点快速定位;基于树的逻辑结构组织数据块,能够以子树的纬度对数据进行冷热处理。通过本发明的存储方案的实现,解决了电商及其相似领域中大规模数据的有效存储、高效存取以及分布式事务的协调问题,为电商及其相似业务的广泛开展提供了有力支持。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的树形结构示意图;
图2是根据本发明实施例的服务器整体架构图;
图3是根据本发明实施例的分布式数据存储方法的主要步骤示意图;
图4是根据本发明一个实施例的分布式数据存储***的主要模块示意图;
图5是根据本发明另一实施例的分布式数据存储***的主要模块示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
为了实现本发明的目的,根据本发明的实施例,通过以子树为单位进行数据存储来解决数据库海量存储的问题;通过与zookeeper等分布式锁组件结合,解决了分布式事务协调的问题。另外,本发明的技术方案,还可以有效地识别和隔离冷数据,便于数据管理员根据数据的使用频度进行区分处理;本发明将数据存取和数据调度寻址两个功能分开实现,从而保证了数据***的高可用、可定制化扩展。
本发明的数据存储并不依赖于数据库,仅要求底层能够提供以块的方式存储数据即可,例如可使用ext4文件***等来实现,和现有技术的主要区别在于:传统的RDBMS管理***在逻辑上把数据当做一个二维表来进行存储;HBase把数据当作key-value对来进行存储;MongoDB是将数据当作一个文档document进行存储;而本发明是将所有的数据当做多棵数(森林)来进行存储的。
以电商业务数据的存储为例来介绍本发明的实施过程。在电商的业务过程中,业务数据的概念结构大体如图1所示。图1是根据本发明实施例的树形结构示意图。
根据本发明,在数据的逻辑树形结构中,每个业务操作对应该逻辑树的一个节点,即该业务操作仅涉及该节点或者该节点及其直接子节点(比如同时操作商品A,或者同时操作商品A及其所有库存),事务范围不跨节点(比如同时处理商品A和商品B的库存)也不跨节点层次(同时处理商品A的库存和商品B自身)的,这使得相应的事务操作界定变得简单,即:简单地向上寻找一个包括了所有操作对象的父级节点进行相关的业务操作即可。
根据本发明的技术方案,每个节点拥有唯一的内部节点号(内部唯一的逻辑标识),通过该节点号,可以很容易的定位到具体的节点。具体的说,子节点的标识是其直接父节点的标识加上该子节点的更详细的分类信息等构成,故而每个节点的标识就能清晰地表达其在整个数据树中的层次关系,使得沿自根到叶和自叶到根两个方向的寻址都变得简单快捷。有别于传统的数据库业务操作中无意义的记录ID号,这里的内部标识隐含记录了业务的逻辑层级,例如:在具体实现中用64bit来标示一条库存记录,将这64bit逻辑的分成3段,0-15位表示商品分类,16-31位表示商品标识,31-63位表示库存记录。这样做的优势是,不需要通过额外的辅助手段,就能快速的定位到记录在整个树结构中的层次关系,进而能快速的定位到具体的存储位置。
由于在进行数据存储时,某些数据的量非常巨大,可能会涉及到多个数据块来进行存储,故一个多层次的树结构里,一般用多个的长整型表示节点,可以根据具体的业务实现自行调整。比如可以将64bit被分为4*16bit来表示具有高度为4的树结构,也可以用多个b4bit来表示一个超大的树。
为了解决分布式事务协调的问题,本发明提出了如图2所示的服务器整体架构图。如图2所示,是根据本发明实施例的服务器整体架构图。逻辑上,该***主要由协调服务器集群Zookeeper Cluster、管理服务器集群Admin Clusters和数据服务器Data Servers构成。
其中,协调服务器集群Zookeeper Cluster负责分布式的协调工作,它记录下每个数据服务器的数据块节点,每个管理服务器的存活情况和主从拓扑结构,以及其它的运行时关键信息,例如:有效的数据服务器的授权信息(根证书的私钥等)、基本参数如各分布式服务器之间的存活探测频率、部分服务器发生异常后的降级规则、本***所服务的一个或者多个树结构的关键信息(如:树的根节点、节点标识的解析规则等),以及管理服务器启动后正常运行时与多个客户端交互需要的关键信息等等。
管理服务器集群Admin Clusters是整个***的管理节点的统称,由多个子集群组成,在同一集群内,多个管理服务器借助于Zookeeper竞争主管理服务器Master,在该特定的子集群内,Master协调响应写操作,Slave提供读操作支持。管理服务器提供了诸多管理功能,包括性能攸关的操作:数据寻址、数据复制、分布式事务支持、安全等。
数据服务器Data Servers是实际的本地数据管理者,在启动时将本地容纳的数据情况报告给Zookeeper,然后响应来自管理服务器和客户端的实际数据读写请求。数据服务器Data Server会通过提供一个额外的缓存层来保证数据的高效读取。
由于数据的读操作实现比较简单,只要确定相应的数据块即可。在有缓存的情况,甚至不需要管理服务器admin server的参与,只有当需要读取历史数据时会需要请求admin server;并且,数据的更新操作为将新内容写入硬盘,然后替换父节点中关于原数据的引用,故可以参考写操作进行,因此,本发明以数据的写操作为例介绍分布式数据存储的过程。
图3是根据本发明实施例的分布式数据存储方法的主要步骤示意图。本发明中,数据的存储单位是给定长度如64M的数据块,并且数据被组织成树形结构,对数据的每个写操作请求对应树形结构的一个节点。如图3所示,本发明的分布式数据存储方法主要包括如下的步骤S31至步骤S32。
步骤S31:接收写操作请求,写操作请求包括待写数据长度。
根据本发明的分布式服务器架构,在数据服务器接收客户端发送的数据写操作请求之前,需要通过管理服务器确定需要接收该写操作请求的数据服务器。
由于在启动阶段时数据服务器data server已经将自己服务的数据块报告给了管理服务器admin server,因此当有管理服务器接收到客户端发来的请求时,会通知负责该请求的标识id的管理服务器来处理该收到的请求,继而确定该请求应该发送给哪个数据服务器。其中,该请求的标识id可以是需要执行写操作的节点标识id或者其父节点的标识parentId(指的是新增数据的时候)。
根据本发明的分布式服务器架构,在完成启动阶段的初始化之后,在管理服务器Admin Server里面会形成一个巨大的树形结构,散布在整个集群中,每组管理服务器维护该森林中的某个局部,在某些节点,该节点通常为某个数据块的实际节点,维护了该数据的物理位置列表,该列表通常由如下格式组成:
<机房:数据服务器节点:数据块>;<机房:数据服务器节点:数据块>;<机房:数据服务器节点:数据块>
该结构表明,对于每份数据,会提供多份复制(以容灾)。***提供了如下手段来提升性能:
一方面,多个数据节点是有序的,通过事先设计的排序算法(例如:距离最近算法),每个请求到达时,管理服务器Admin Server会参考请求的客户端的IP,寻找离该客户端最近的数据节点服务。距离最近算法大体上遵循:本机<本机家<本机房<异地机房的原则。另外,管理服务器会根据数据服务器Data Server的负载监控对可用数据服务器列表做权重微调。当请求量激增时,我们通过调整数据服务器Data Server前端的缓存Cache策略来改善性能,而不是增加实际数据的拷贝份数,这样既简化了设计,又减轻了数据复制带来的维护压力。
另一方面,由于数据节点过多,放在zookeeper上不仅增加了协调服务器的压力,也影响性能,故我们将整个树迁移到管理服务器Admin Server上。在管理服务器AdminServer中,我们在内存中提供了一个快照,比协调服务器丰富高效的数据结构保证了数据节点的快速读取。同时,zookeeper节点中存在相应的原始凭据,保障了当管理服务器AdminServer遇到故障后能够快速恢复。
当确定了负责处理该写操作请求的管理服务器和数据服务器后,客户端即可将写操作请求发送给对应的数据服务器。
步骤S32:确定写操作请求对应的树形结构中的节点,当待写数据长度不超出所写操作请求对应的节点所在的数据块的剩余空间,则锁定该数据块并执行该写操作,否则根据待写数据长度分配一个或多个新数据块并把以该节点为根的子树迁移到所分配的新数据块,在该节点原来所在的数据块中设置链接指示该子树的位置,锁定所述新数据块并执行该写操作,其中,当接收写操作请求时,该写操作请求对应的节点不是当前树形结构中已有节点而是要新增加的节点,并且当该节点不是树形结构的根节点时,以该节点的直接父节点所在的数据块作为该节点所在的数据块,当该节点是树形结构的根节点时,分配新数据块作为该节点所在的数据块。
根据本发明的服务器架构,当数据服务器接收到写操作请求后,将确定该写操作请求对应的树形结构中的节点,以用于存储写操作请求中的数据。该写操作请求对应的树形结构中的节点根据写操作请求中的请求标识id获得,其中,请求标识id可以是需要执行写操作的节点标识id或者其父节点的标识parentId(指的是新增数据的时候)。
本发明中对于数据新增的处理首先是寻找本数据块内是否有足够的空间,当空间不够时,一次性的申请固定大小的存储块,并根据实际的需要,会在适当的时候***节点,产生子节点。
对于每一个数据块,除了该块头部的meta数据(元数据),第一个数据节点为后续节点的先祖,即后续节点可依次为第一节点的子节点、孙节点、曾孙节点等。当一个节点及其子树数据过多时,可以根据一定的算法对数据块进行***,即将某个子树(当该子树的数据过于庞大时)迁移到一个新的数据块,而在原来的位置,仅使用一个指针指示新数据块的位置。其中,所选用的数据块***算法可根据业务特点进行确定,例如:可以一个数据节点***成为两个数据节点,或者两个相邻的数据节点***成为3个数据节点,或者抽出个别数据量的子节点扩展到一个子块,其它节点为另一子块等。
另外,数据内部采用一定程度的压缩以节约存储空间。例如:
1、每个数据块较大,比如64M,以节约表示这些数据块的物理结构需要的空间大小;
2、每数据块内部分成多个页,每页建议同宿主操作***的页大小(例如:64bitLinux操作***下为8192),这样便于通过mmap类似的操作快速读取数据;
3、加入新节点时,优先在父节点的已申请页内分配,当达到一定的阀值或者父节点页空间不够时,***父节点形成到更多的数据页(甚至物理块);
4、父节点的列表里面,每个子节点通过一个额外的存储属性标示自己。也就是说,树形结构的每个节点具有唯一的标识,且子节点的标识包括该子节点的直接父节点的标识。如此,即可很方便地进行节点的定位。根据子节点的位置,大致可包含以下3种情况:
块内地址:子节点与父节点在同一物理块内,通过后续的块内偏移可以找到实际的数据内容,其中,块内偏移量为该数据块相对块头的距离,即:数据的实际位置-数据块头位置;
块外地址:该子节点的实际内容不在其父节点所在的数据块内,需要通过管理服务器Admin Server定位该子节点的物理块的位置;
后备地址:该子节点实际内容甚至不在本***内,需要通过额外的读取外部存储来获取实际的数据内容,这种情况多发生在这个子节点的数据内容长期不活跃,或者属于业务过期数据,所以已被归档。
结合本发明的分布式服务器架构,本发明利用多个数据服务器管理所述数据块,并且利用管理服务器确定写操作对应的节点所在的数据块和管理该数据块的数据服务器。当管理服务器和数据服务器在进行数据写操作的处理时,当为子树分配的新数据块的位置与其所在树形结构的父节点的数据块在同一数据服务器内的相同数据块时,通过所述新数据块与数据块头地址的块内偏移量进行节点的定位;当为子树分配的新数据块的位置与其所在树形结构的父节点的数据块在同一管理服务器管理的非同一数据服务器内时,通过所述管理服务器进行节点的定位;当为子树分配的新数据块的位置与其所在树形结构的父节点的数据块不在同一管理服务器管理的数据服务器内时,通过读取所述新数据块的外部地址来进行节点的定位。
对于分布式事务的实现,考虑到我们需要解决的问题域的特定事实,如前所述,以电商商品领域为例,事务多集中在同一店铺的多个商品,或者是同一商品的多个SKU单位,即这些事务都发生在同一树结构的父节点的多个子节点(树)上。事实上,多数需要同步的事务操作都集中同一数据块(及其复制块、子块)上,只需要单个协调服务器集群就能处理该类事务。一般来说,对于分布式事务的实现,若写操作对应的节点在同一管理服务器管理的数据服务器内,则由该管理服务器负责执行所述业务操作;若所述写操作对应的节点不在同一管理服务器管理的数据服务器内,则所述业务操作所涉及的多个管理服务器先选举出一个用于协调响应业务操作的主管理服务器,再由该主管理服务器协调其他的管理服务器执行所述业务操作;其中,***中所有管理服务器的存活情况和主从拓扑结构通过协调服务器集群来维护。
但是仍有少部分事务操作需要涉及多个数据块(及其复制块、子块),当跨越集群的事务出现时,我们可以借助协调服务器集群,用两阶段提交来处理事务,即:先让涉及范围内的多个协调服务器Zookeeper Clusters选举出一个更高层的Master,然后利用这个临时性的Master协调跨机房的事务。此时,在管理服务器Admin Server中会额外的保留一份当前Zookeeper服务器事务的快照,当协调服务器集群不可用时(极小概率事件)能够提供一个比对恢复的凭据。
另外,根据本发明的技术方案,在所述树形结构的节点中设置数据年龄和冷热分值,并根据对数据的存取来统计所述数据冷热分值,定期根据数据年龄和冷热分值把满足设定阈值的冷数据导出到后备存储。
在数据服务器Data Server层,会根据本块数据的存取情况对热数据做适当的缓存,并把数据的热、冷情况汇总给Admin Server,在Admin Server中,会根据数据的冷热情况,安排更多的资源处理热数据,而相应的冷数据可以安排少量的资源做预备。更进一步的,对于个别的只需要存档的历史数据,可以直接从Data Server下调数据并放入后备的存储比如ES(ElasticSearch,一种开源的数据存储软件,它提供了数据存储和全文检索能力)中,这样可以节省宝贵的数据名空间资源和事务资源。
在本***中,在本机存储空间和***资源允许的情况下,申请或使用更多的物理数据块是数据服务器Data Server自动职责之一,Data Server还会处理本服务器内部的数据均衡工作(父节点的拆分等)以及其它更多的局部优化操作,同时,它会将自己的负载定期同步给管理服务器Admin Server,以便通过Admin Server,使管理员能够获取全局的数据分布情况,从而手动的驱动数据的迁移(以达到全局更佳优化的目的)。
本发明的优势之一在于,其并不强依赖于数据服务器Data Servers的硬件的可靠性,由于Data Servers前端的缓存Cache层和数据复制技术等,可使其在不依赖于昂贵的硬件的情况下也能提供不错的性能,满足业务需要的高可用性。
根据前述对本发明实施例的介绍,可以看出,本发明中***的性能瓶颈主要出现在两部分:数据节点的路由和数据节点的读取解析。
对于数据节点的读取解析,可通过缓存层Cache以及数据页的mmap技术来缓解数据的读取压力;对于数据节点的路由,通过提供更多的内存给管理服务器Admin Server以使其容纳更细粒度更多的节点细节,从而能带来更多的数据提升。
更进一步的,客户端缓存路由细节,通过订阅协调服务器Zookeeper server来实时跟踪特定数据的路由细节,由于数据局部性的原理,这种设计具有很高的数据命中率,能够很好的加速路由。
图4是根据本发明一个实施例的分布式数据存储***的主要模块示意图。本发明中,所述数据的存储单位是给定长度的数据块,并且所述数据被组织成树形结构,对所述数据的每个写操作请求对应所述树形结构的一个节点。如图4所示,本发明的分布式数据存储***40主要包括:请求接收模块41和节点确定模块42。
请求接收模块41用于接收写操作请求,所述写操作请求包括待写数据长度;节点确定模块42用于确定所述写操作请求对应的所述树形结构中的节点,当所述待写数据长度不超出所述写操作请求对应的节点所在的数据块的剩余空间,则锁定该数据块并执行该写操作,否则根据待写数据长度分配一个或多个新数据块并把以该节点为根的子树迁移到所分配的新数据块,在该节点原来所在的数据块中设置链接指示该子树的位置,锁定所述新数据块并执行该写操作,其中,当接收所述写操作请求时,该写操作请求对应的节点不是当前树形结构中已有节点而是要新增加的节点,并且当该节点不是所述树形结构的根节点时,以该节点的直接父节点所在的数据块作为该节点所在的数据块,当该节点是所述树形结构的根节点时,分配新数据块作为该节点所在的数据块。
根据本发明的技术方案,所述树形结构的每个节点具有唯一的标识,且子节点的标识包括该子节点的直接父节点的标识。
另外,在所述树形结构的节点中设置数据年龄和冷热分值,并根据对数据的存取来统计所述数据冷热分值,定期根据数据年龄和冷热分值把满足设定阈值的冷数据导出到后备存储。
本发明中,利用多个数据服务器管理所述数据块,并且利用管理服务器确定写操作对应的节点所在的数据块和管理该数据块的数据服务器,当为子树分配的新数据块的位置与其所在树形结构的父节点的数据块在同一数据服务器内的相同数据块时,通过所述新数据块与数据块头地址的块内偏移量进行节点的定位;为子树分配的新数据块的位置与其所在树形结构的父节点的数据块在同一管理服务器管理的非同一数据服务器内时,通过所述管理服务器进行节点的定位;当为子树分配的新数据块的位置与其所在树形结构的父节点的数据块不在同一管理服务器管理的数据服务器内时,通过读取所述新数据块的外部地址来进行节点的定位。
在进行分布式业务实现时,若写操作对应的节点在同一管理服务器管理的数据服务器内,则由该管理服务器负责执行所述业务操作;若所述写操作对应的节点不在同一管理服务器管理的数据服务器内,则所述业务操作所涉及的多个管理服务器先选举出一个用于协调响应业务操作的主管理服务器,再由该主管理服务器协调其他的管理服务器执行所述业务操作;其中,***中所有管理服务器的存活情况和主从拓扑结构通过协调服务器集群来维护。
图5是根据本发明另一实施例的分布式数据存储***的主要模块示意图。本发明中,所述数据的存储单位是给定长度的数据块,并且所述数据被组织成树形结构,对所述数据的每个写操作请求对应所述树形结构的一个节点。如图5所示,本发明的分布式数据存储***50包括:存储器51和处理器52。
其中,存储器51存储指令;处理器52执行所述指令用于:接收写操作请求,所述写操作请求包括待写数据长度;确定所述写操作请求对应的所述树形结构中的节点;当所述待写数据长度不超出所述写操作请求对应的节点所在的数据块的剩余空间,则锁定该数据块并执行该写操作,否则根据待写数据长度分配一个或多个新数据块并把以该节点为根的子树迁移到所分配的新数据块,在该节点原来所在的数据块中设置链接指示该子树的位置,锁定所述新数据块并执行该写操作,其中,当接收所述写操作请求时,该写操作请求对应的节点不是当前树形结构中已有节点而是要新增加的节点,并且当该节点不是所述树形结构的根节点时,以该节点的直接父节点所在的数据块作为该节点所在的数据块,当该节点是所述树形结构的根节点时,分配新数据块作为该节点所在的数据块。
根据本发明实施例的技术方案,根据数据的内在特征,通过树形结构存储数据,保证了具有亲子关系的数据块可以就近存储;内部节点的唯一标识采用前缀树结构进行编码,以实现仅需通过有限的计算就能对节点快速定位;基于树的逻辑结构组织数据块,能够以子树的纬度对数据进行冷热处理。通过本发明的存储方案的实现,解决了电商及其相似领域中大规模数据的有效存储、高效存取以及分布式事务的协调问题,为电商及其相似业务的广泛开展提供了有力支持。
另外,本发明中还可以将数据节点存放在文档类型的辅助存储容器如MongoDB中,或者采用其它编码格式来实现节点的唯一标识等等方案,也可达到本发明的目的。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (12)
1.一种分布式数据存储方法,所述数据的存储单位是给定长度的数据块,并且所述数据被组织成树形结构,对所述数据的每个写操作请求对应所述树形结构的一个节点,其特征在于,所述方法包括:
接收写操作请求,所述写操作请求包括待写数据长度;
确定所述写操作请求对应的所述树形结构中的节点,
当所述待写数据长度不超出所述写操作请求对应的节点所在的数据块的剩余空间,则锁定该数据块并执行该写操作,否则根据待写数据长度分配一个或多个新数据块并把以该节点为根的子树迁移到所分配的新数据块,在该节点原来所在的数据块中设置链接指示该子树的位置,锁定所述新数据块并执行该写操作,
其中,当接收所述写操作请求时,该写操作请求对应的节点不是当前树形结构中已有节点而是要新增加的节点,并且当该节点不是所述树形结构的根节点时,以该节点的直接父节点所在的数据块作为该节点所在的数据块,当该节点是所述树形结构的根节点时,分配新数据块作为该节点所在的数据块。
2.根据权利要求1所述的方法,其特征在于,所述树形结构的每个节点具有唯一的标识,且子节点的标识包括该子节点的直接父节点的标识。
3.根据权利要求1所述的方法,其特征在于,在所述树形结构的节点中设置数据年龄和冷热分值,并根据对数据的存取来统计所述数据冷热分值,定期根据数据年龄和冷热分值把满足设定阈值的冷数据导出到后备存储。
4.根据权利要求1所述的方法,其特征在于,
利用多个数据服务器管理所述数据块,并且利用管理服务器确定写操作对应的节点所在的数据块和管理该数据块的数据服务器,
当为子树分配的新数据块的位置与其所在树形结构的父节点的数据块在同一数据服务器内的相同数据块时,通过所述新数据块与数据块头地址的块内偏移量进行节点的定位;
当为子树分配的新数据块的位置与其所在树形结构的父节点的数据块在同一管理服务器管理的非同一数据服务器内时,通过所述管理服务器进行节点的定位;
当为子树分配的新数据块的位置与其所在树形结构的父节点的数据块不在同一管理服务器管理的数据服务器内时,通过读取所述新数据块的外部地址来进行节点的定位。
5.根据权利要求1所述的方法,其特征在于,
若写操作对应的节点在同一管理服务器管理的数据服务器内,则由该管理服务器负责执行所述写操作;
若所述写操作对应的节点不在同一管理服务器管理的数据服务器内,则所述写操作所涉及的多个管理服务器先选举出一个用于协调响应写操作的主管理服务器,再由该主管理服务器协调其他的管理服务器执行所述写操作;
其中,***中所有管理服务器的存活情况和主从拓扑结构通过协调服务器集群来维护。
6.一种分布式数据存储***,所述数据的存储单位是给定长度的数据块,并且所述数据被组织成树形结构,对所述数据的每个写操作请求对应所述树形结构的一个节点,其特征在于,所述***包括:
请求接收模块,用于接收写操作请求,所述写操作请求包括待写数据长度;
节点确定模块,用于确定所述写操作请求对应的所述树形结构中的节点,
当所述待写数据长度不超出所述写操作请求对应的节点所在的数据块的剩余空间,则锁定该数据块并执行该写操作,否则根据待写数据长度分配一个或多个新数据块并把以该节点为根的子树迁移到所分配的新数据块,在该节点原来所在的数据块中设置链接指示该子树的位置,锁定所述新数据块并执行该写操作,
其中,当接收所述写操作请求时,该写操作请求对应的节点不是当前树形结构中已有节点而是要新增加的节点,并且当该节点不是所述树形结构的根节点时,以该节点的直接父节点所在的数据块作为该节点所在的数据块,当该节点是所述树形结构的根节点时,分配新数据块作为该节点所在的数据块。
7.根据权利要求6所述的***,其特征在于,所述树形结构的每个节点具有唯一的标识,且子节点的标识包括该子节点的直接父节点的标识。
8.根据权利要求6所述的***,其特征在于,在所述树形结构的节点中设置数据年龄和冷热分值,并根据对数据的存取来统计所述数据冷热分值,定期根据数据年龄和冷热分值把满足设定阈值的冷数据导出到后备存储。
9.根据权利要求6所述的***,其特征在于,
利用多个数据服务器管理所述数据块,并且利用管理服务器确定写操作对应的节点所在的数据块和管理该数据块的数据服务器,
当为子树分配的新数据块的位置与其所在树形结构的父节点的数据块在同一数据服务器内的相同数据块时,通过所述新数据块与数据块头地址的块内偏移量进行节点的定位;
当为子树分配的新数据块的位置与其所在树形结构的父节点的数据块在同一管理服务器管理的非同一数据服务器内时,通过所述管理服务器进行节点的定位;
当为子树分配的新数据块的位置与其所在树形结构的父节点的数据块不在同一管理服务器管理的数据服务器内时,通过读取所述新数据块的外部地址来进行节点的定位。
10.根据权利要求6所述的***,其特征在于,
若写操作对应的节点在同一管理服务器管理的数据服务器内,则由该管理服务器负责执行所述写操作;
若所述写操作对应的节点不在同一管理服务器管理的数据服务器内,则所述写操作所涉及的多个管理服务器先选举出一个用于协调响应写操作的主管理服务器,再由该主管理服务器协调其他的管理服务器执行所述写操作;
其中,***中所有管理服务器的存活情况和主从拓扑结构通过协调服务器集群来维护。
11.一种分布式数据存储设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-5中任一所述的方法。
12.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-5中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610810580.XA CN107807787B (zh) | 2016-09-08 | 2016-09-08 | 一种分布式数据存储方法和*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610810580.XA CN107807787B (zh) | 2016-09-08 | 2016-09-08 | 一种分布式数据存储方法和*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107807787A CN107807787A (zh) | 2018-03-16 |
CN107807787B true CN107807787B (zh) | 2020-12-22 |
Family
ID=61576161
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610810580.XA Active CN107807787B (zh) | 2016-09-08 | 2016-09-08 | 一种分布式数据存储方法和*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107807787B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109241053B (zh) * | 2018-07-27 | 2022-08-23 | 创新先进技术有限公司 | 一种标识码分配方法、装置及服务器 |
CN109726252A (zh) * | 2018-12-29 | 2019-05-07 | 税友软件集团股份有限公司 | 一种分布式数据集的数据管理方法及相关装置 |
CN110515909B (zh) * | 2019-08-29 | 2022-05-13 | 北京字节跳动网络技术有限公司 | 文件存储方法、装置、电子设备及计算机存储介质 |
CN111224875B (zh) * | 2019-12-26 | 2021-03-19 | 北京邮电大学 | 基于信息价值确定联合数据采集及传输策略的方法及装置 |
CN114791941B (zh) * | 2022-06-21 | 2022-08-26 | 北京有生博大软件股份有限公司 | 一种静默化数据处理方法及处理*** |
CN115002103B (zh) * | 2022-08-04 | 2022-11-29 | 正链科技(深圳)有限公司 | 一种分布式网络中数据极速传输的方法及*** |
CN114995772B (zh) * | 2022-08-08 | 2022-10-21 | 南京三百云信息科技有限公司 | 客户数据迁移存储方法及装置 |
CN116450054B (zh) * | 2023-06-16 | 2023-09-26 | 成都泛联智存科技有限公司 | Io请求处理方法、装置、主机和计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103180852A (zh) * | 2012-08-09 | 2013-06-26 | 华为技术有限公司 | 分布式数据处理方法及装置 |
CN103530067A (zh) * | 2013-10-09 | 2014-01-22 | 华为技术有限公司 | 一种数据操作的方法和设备 |
CN105808155A (zh) * | 2014-12-31 | 2016-07-27 | 北京神州云科数据技术有限公司 | 基于双控制器的读写锁方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9361171B2 (en) * | 2014-03-07 | 2016-06-07 | ProfitBricks, Inc. | Systems and methods for storage of data in a virtual storage device |
-
2016
- 2016-09-08 CN CN201610810580.XA patent/CN107807787B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103180852A (zh) * | 2012-08-09 | 2013-06-26 | 华为技术有限公司 | 分布式数据处理方法及装置 |
CN103530067A (zh) * | 2013-10-09 | 2014-01-22 | 华为技术有限公司 | 一种数据操作的方法和设备 |
CN105808155A (zh) * | 2014-12-31 | 2016-07-27 | 北京神州云科数据技术有限公司 | 基于双控制器的读写锁方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107807787A (zh) | 2018-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107807787B (zh) | 一种分布式数据存储方法和*** | |
US11030185B2 (en) | Schema-agnostic indexing of distributed databases | |
Makris et al. | A classification of NoSQL data stores based on key design characteristics | |
US9940375B2 (en) | Systems and methods for interest-driven distributed data server systems | |
US9507807B1 (en) | Meta file system for big data | |
Padhy et al. | RDBMS to NoSQL: reviewing some next-generation non-relational database’s | |
WO2015106711A1 (zh) | 一种为半结构化数据构建NoSQL数据库索引的方法及装置 | |
US8161244B2 (en) | Multiple cache directories | |
US20190392047A1 (en) | Multi-table partitions in a key-value database | |
CN103353873B (zh) | 基于时间度量数据实时查询服务的优化实现方法及*** | |
US20130110873A1 (en) | Method and system for data storage and management | |
US8468171B2 (en) | Attributed key-value-store database system | |
CN103544261B (zh) | 一种海量结构化日志数据全局索引管理方法及装置 | |
CN105677826A (zh) | 一种针对海量非结构化数据的资源管理方法 | |
CN107798130A (zh) | 一种分布式存储的快照方法 | |
US10649980B2 (en) | Methods and systems for resilient, durable, scalable, and consistent distributed timeline data store | |
CN103020204A (zh) | 一种对分布式顺序表进行多维区间查询的方法及其*** | |
CN103942301B (zh) | 一种面向多数据类型访问应用的分布式文件*** | |
JP2012168781A (ja) | 分散型データストアシステム及び分散型データストアシステムにおけるレコード管理方法 | |
Tsai et al. | Scalable SaaS indexing algorithms with automated redundancy and recovery management. | |
US9275059B1 (en) | Genome big data indexing | |
Ho et al. | Data partition optimization for column-family NoSQL databases | |
CN102597969A (zh) | 带属性的键值存储的数据库管理装置及其键值存储结构的高速缓存装置 | |
Singh | NoSQL: A new horizon in big data | |
US20240086362A1 (en) | Key-value store and file system |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |