CN103577339B - 一种数据存储方法及系统 - Google Patents
一种数据存储方法及系统 Download PDFInfo
- Publication number
- CN103577339B CN103577339B CN201210264003.7A CN201210264003A CN103577339B CN 103577339 B CN103577339 B CN 103577339B CN 201210264003 A CN201210264003 A CN 201210264003A CN 103577339 B CN103577339 B CN 103577339B
- Authority
- CN
- China
- Prior art keywords
- record
- block
- data
- write
- index
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0871—Allocation or management of cache space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0846—Cache with multiple tag or data arrays being simultaneously accessible
- G06F12/0848—Partitioned cache, e.g. separate instruction and operand caches
-
- 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/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- 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/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0613—Improving I/O performance in relation to throughput
-
- 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
- G06F3/064—Management of blocks
-
- 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/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0685—Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/28—Using a specific disk cache architecture
- G06F2212/282—Partitioned cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/604—Details relating to cache allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/62—Details of cache specific to multiprocessor cache arrangements
- G06F2212/622—State-only directory, i.e. not recording identity of sharing or owning nodes
Abstract
本发明属于计算机技术领域,尤其涉及一种数据存储方法及系统。本发明实施例的数据存储方法包括:将磁盘和内存资源划分成小表;将小表的内存空间划分为不同的逻辑对象;将小表的磁盘空间按固定大小划分成多个等大的数据块。本发明实施例的数据存储系统及方法通过划分存储服务器上的磁盘和内存资源为一个个独立的小表,将小表用作业务资源分配和管理的基本单元,可实现单机资源在多个业务上的复用;另外,混合式索引及其关联的合并写,块回收技术在提升系统随机写IOPS的同时能大幅节省了索引的内存空间。
Description
技术领域
本发明属于计算机技术领域,尤其涉及一种数据存储方法及系统。
背景技术
当前分布式数据存储系统的存储介质主要有SATA盘、SAS盘、SSD盘/卡,随着硬件制造技术的发展,单盘的存储容量在不断提升,但盘的随机IO(输入输出)能力没能成比例的提升,存储介质的随机IO能力是一个潜在的性能瓶颈。解决存储介质的随机IO性能瓶颈的思路主要是将随机IO转为顺序IO或引入缓存减少IO次数。由于在大部分业务存储访问场景下随机读难以避免,一般通过引入内存Cache减少对存储介质的访问或变更存储介质,如改用随机读性能较高的SSD盘/卡加以优化。随机写IO的优化可将随机写变为顺序写(如BigTable的SSTable)或mmap将数据映射到内存进行异步IO。
现有其他提升随机IO的方式有如下几种:Google BigTable通过随机写转顺序写实现IO性能的优化,通过MemTable和SSTable的方式,将一段时间的所有数据更新存储在一起顺序写入磁盘,之后再将记录按照预定义的顺序进行分拆并跟老版本的数据进行合并;TyotoCabinet采用mmap将磁盘上的数据映射到共享内存中,通过内存来减少对磁盘的读写;MySQL的InnoDB存储引擎在底层采用B+树的组织方式,同样通过Buffer Pool(缓冲池)将写转化为异步写,来提升写延时体验和减少对磁盘的读写。
现有提升随机IO的方式缺点在于:随机写转顺序写系统实现复杂,运营成本高;采取MemTable/SSTable将随机写全部转成顺序写的方式,在数据读取时可能需要读取多处以获得最新的数据版本;此外,在做数据合并时需执行较大规模的数据读写,并可能伴随分裂等操作,系统比较复杂,运营维护成本较高;针对mmap和MySQL的buffer pool方案,如果单机的存储量高于内存,数据无明显热点时,系统的整体IO性能转为存储介质的实际能力,内存对IO性能提升效率比较有限。
发明内容
本发明提供了一种数据存储方法及系统,旨在解决现有技术数据存储方式随机输入输出能力有限、实现复杂以及运营困难的问题。
本发明是这样实现的,一种数据存储方法,包括:
将磁盘和内存资源划分成小表;
将小表的内存空间划分为不同的逻辑对象;
将小表的磁盘空间按固定大小划分成多个等大的数据块。
本发明实施例的技术方案还包括:所述小表内存空间划分的逻辑对象包括:记录索引缓存、写缓存和块缓存;所述记录索引缓存用于存储记录的索引信息;所述写缓存用于记录写缓冲;所述块缓存由块结构描述符组成,用于统计块状态信息。
本发明实施例的技术方案还包括:所述记录索引缓存包括桶索引和大记录索引,大于设定的记录大小阀值的记录采用大记录索引,在大记录索引中,记录采用独立索引;小于设定的记录大小阀值的记录采用桶索引,将桶打包成记录存储。
本发明实施例的技术方案还包括:所述数据块的数据组织结构包括序列和定长信息块,所述序列用于描述存储在数据块内的记录,所述定长信息块用于描述描述块的元信息。
本发明实施例的技术方案还包括:所述数据存储方法的记录读包括:读写缓存,根据关键字从写缓存查找记录,如果找到记录,直接返回;从记录索引缓存获取记录索引,根据所述记录索引获取记录偏移地址和记录大小;根据索引中的偏移地址和记录大小,从磁盘读取数据。
本发明实施例的技术方案还包括:所述数据存储方法的记录修改包括:读写缓存,根据关键词从写缓存中查找记录;判断是否找到相应记录,如果找到记录,在写缓存中更新记录并返回;如果没有找到记录,则将记录添加到写缓存。
本发明实施例的技术方案还包括:所述数据存储方法的块合并写包括:定时从写缓存中取记录;对每个记录读取关键词缓存及磁盘,判断记录写场景;统计结果集,判断写入数据能否凑成一个数据块,如果写入数据可以凑成一个块,将结果集中记录整理成一个块;如果写入数据不能凑成一个块,则继续处理剩下的记录。
本发明实施例的技术方案还包括:所述数据存储方法的块合并写判断记录写场景包括:如果是小记录更新或删除,更新后记录小于一预定值,则根据桶记录的尺寸将记录转成桶记录后添加到结果集或将桶记录重新序列化后添加到结果集;如果是小记录更新,更新后此记录大于一预定值,将记录从桶记录中删除,将桶记录重新序列化后添加到结果集,并构造二个索引更新对象,添加到索引更新集合;如果是大记录更新,将记录添加到结果集,构造索引更新对象,添加到索引更新集合;如果是大记录删除,构造删除流水,添加到结果集,构造索引更新对象,添加到索引更新集合。
本发明实施例的技术方案还包括:所述数据存储方法的块合并写包括:根据块缓存找到2个有效数据长度均小于预定大小的数据块;从磁盘上读取找到的数据块;解析数据块,根据关键词缓存信息剔除过时数据,将有效数据合并成一个数据块;重新计算新数据块的定长信息块,写入时间设置为两个老数据块中较新的时间戳;写入新的数据块;在关键词缓存中更新新数据块中记录的索引;在块缓存中重置两个老的数据块信息,更新新写入的数据块的信息。
本发明实施例采取的另一技术方案为:一种数据存储系统,包括磁盘、内存、资源划分模块、逻辑对象划分模块和数据块划分模块,所述资源划分模块将磁盘和内存资源划分成小表;逻辑对象划分模块将小表的内存空间划分为不同的逻辑对象;数据块划分模块小表的磁盘空间按固定大小划分成多个等大的数据块。
本发明实施例的技术方案还包括:所述小表内存空间划分的逻辑对象包括:记录索引缓存、写缓存和块缓存;所述记录索引缓存用于存储记录的索引信息;所述写缓存用于记录写缓冲;所述块缓存由块结构描述符组成,用于统计块状态信息。
本发明实施例的技术方案还包括:所述记录索引缓存包括桶索引和大记录索引,大于设定的记录大小阀值的记录采用大记录索引,在大记录索引中,记录采用独立索引;小于设定的记录大小阀值的记录采用桶索引,将桶打包成记录存储。
本发明实施例的技术方案还包括:所述数据块的数据组织结构包括序列和定长信息块,所述序列用于描述存储在数据块内的记录,所述定长信息块用于描述描述块的元信息。
本发明实施例采取的另一技术方案为:一种数据存储服务器,包括磁盘和内存,所述磁盘和内存资源划分成小表;所述小表的内存空间划分为不同的逻辑对象;所述磁盘空间按固定大小划分成多个等大的数据块。
本发明实施例的技术方案还包括:所述小表内存空间划分的逻辑对象包括:记录索引缓存、写缓存和块缓存;所述记录索引缓存用于存储记录的索引信息;所述写缓存用于记录写缓冲;所述块缓存由块结构描述符组成,用于统计块状态信息。
本发明实施例的技术方案还包括:所述数据块的数据组织结构包括序列和定长信息块,所述序列用于描述存储在数据块内的记录,所述定长信息块用于描述描述块的元信息。
本发明实施例的技术方案具有如下优点或有益效果:本发明实施例的数据存储系统及方法通过划分存储服务器上的磁盘和内存资源为一个个独立的小表,将小表用作业务资源分配和管理的基本单元,可实现单机资源在多个业务上的复用;另外,混合式索引及其关联的合并写,块回收技术在提升系统随机写IOPS的同时能大幅节省了索引的内存空间。
附图说明
附图1是本发明实施例的数据存储方法的流程图;
附图2是本发明实施例的数据存储方法的记录索引缓存的内存结构示意图;
附图3是本发明实施例的数据存储方法的块缓存的内存结构示意图;
附图4是本发明实施例的数据存储方法的记录读的流程图;
附图5是本发明实施例的数据存储方法的记录修改的流程图;
附图6是本发明实施例的数据存储方法的块合并写的流程图;
附图7是本发明实施例的数据存储方法的块回收的流程图;
附图8是本发明实施例的数据存储系统的结构示意图;
附图9是本发明实施例的数据存储服务器的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参阅图1,是本发明实施例的数据存储方法的流程图。本发明实施例的数据存储方法包括以下步骤:
步骤100:将磁盘和内存资源划分成小表(Tablet);
在步骤100中,每个小表独立工作,小表通过Hash哈希和记录索引相结合的方式对磁盘中的记录进行索引。在本发明的实施方式中,假设一个小表的资源是由磁盘上物理地址连续的2GB空间和内存中16MB的共享内存空间组成,另外,可以根据需要设定磁盘空间和内存空间的大小。
步骤110:将小表的内存空间划分为不同的逻辑对象;
在步骤110中,小表的内存空间划分为3个逻辑对象:记录索引缓存KeyCache、写缓存WriteCache和块缓存BlockCache,其中:KeyCache占用12MB空间,包括桶索引和大记录索引两部分,具体请参阅图2,是本发明实施例的数据存储方法的记录索引缓存的内存结构示意图,其用于存储记录的索引信息,记录对应的也分为桶记录和大记录两种类型,在本发明另一实施方式中,KeyCache可以仅包括大记录索引部分,记录也可以仅为大记录一种类型。记录的索引查找需要计算hash(key)%(300*1024)的值,从而获取到一条桶记录索引,根据桶记录索引的桶头字段定位到一个大记录索引,用大记录索引的next字段遍历整条链,比对key查找到记录的索引;若大记录索引没有命中,取桶记录索引为记录的索引。由于Keycache的组织采用大记录索引和桶索引的混合索引模式,一方面克服了全索引模式的缺点,全索引需要为每条记录在内存中建条索引,其索引存储空间大,对内存需求大;另一方面,克服了全桶索引的缺点,桶记录是采用hash结构,全桶索引更新桶中的一条子记录会将整个桶记录读出并写入,存在磁盘读写带宽的放大,对SSD存储介质来说,写带宽放大会降低寿命,同时对读写性能也有所影响。本发明实施例的数据存储方法根据内存的情况,制定一个记录大小阀值,大于此阀值大小的记录采用大记录索引,在大记录索引中一条记录一个独立索引,用链式串联起来;小于此阀值的记录采用桶记录,将Hash的桶打包成一个记录存储。在磁盘中,一个Hash桶在内存中建立一条索引,极大降低了索引的数量。在本发明实施例中,可以将小表设计成2G,桶记录和大记录索引各约30万个,大于4KB的记录用大记录索引,大于4KB的记录采用桶索引。如果记录大小都比较大, 2G的小表存储的记录数较少,30万索引已足够存储;如记录都比较小,30万的桶索引可以保证每个桶记录的大小不超过4KB。
WriteCache占用约4MB空间,用做记录写缓冲,实现数据异步写入磁盘,BlockCache占用64KB,由4000个16字节的块结构描述符组成,用作统计块状态信息,具体请参阅图3,是本发明实施例的数据存储方法的块缓存的内存结构示意图。块的有效size字段表示,块中记录未发生更新的记录的总大小;块更新时间字段表示块写入磁盘的时间;块next字段用于将空闲块和待回收块用链表组织起来,链接成空闲块链(free链)和回收块链(recycle链)。WriteCache是基于共享内存的哈希图(HashMap)。
步骤120:将小表的磁盘空间按固定大小划分成多个等大的数据块。
在步骤120中,将小表2GB的磁盘空间按固定大小划分成多个等大的数据块,在本发明实施方式中,假设块大小为512KB,每个数据块的数据组织结构如下:
每个<checksum,keylen,key,vallen,value>5元组描述存储在数据块内的一条记录,记录在数据块内紧凑排列,在块的尾部用定长信息块(Trailer信息块)描述块的元信息,如块的数据校验、块写入时间和块内的记录数。
在本发明实施方式中,数据存储方法的典型数据读写流程包括记录读(read)、记录修改(包括Insert/Update/Delete)、块合并写和块回收;具体请一并参阅图4,是本发明实施例的数据存储方法的记录读的流程图。本发明数据存储方法的记录读包括以下步骤:
步骤200:读WriteCache,根据key关键字从WriteCache查找记录,如果找到记录,直接返回;
步骤210:从KeyCache获取记录索引,根据上述记录索引查找方法获取到记录偏移地址(offset)和大小;
步骤220:根据索引中的偏移地址和记录大小,从磁盘读取数据;
在步骤220中,根据记录的类型做相应处理:如果记录是大记录,直接返回;如果记录是桶记录,则解析桶记录,遍历桶记录中的所有子记录,匹配key,找到key返回记录;如果没有找到,则返回记录不存在的错误提示。
请一并参阅图5,是本发明实施例的数据存储方法的记录修改的流程图。本发明数据存储方法的记录修改包括以下步骤:
步骤300:读WriteCache,根据key从WriteCache查找记录;
步骤310:判断是否找到相应记录,如果找到记录,则进入步骤320;如果没有找到记录则进入步骤330;
步骤320:在WriteCache中更新记录并返回;
步骤330:将记录添加到WriteCache。
在步骤330中,删除记录可通过设置记录标志加以区分。
请一并参阅图6,是本发明实施例的数据存储方法的块合并写的流程图。本发明数据存储方法的块合并写包括以下步骤:
步骤400:定时从write cache按先进先出(FIFO)顺序取记录;
在步骤400中,取记录一次取512KB数据。
步骤410:对每个记录,读取key cache及ssd盘,判断记录写场景:
如果是小记录更新,更新后此记录仍小于4kb:转步骤420
如果是小记录更新,更新后此记录大于4kb:转步骤430
如果是大记录更新:转步骤440
如果是小记录删除:转步骤420
如果是大记录删除:转步骤450
步骤420:根据桶记录的size作如下判断:
size==0:将此记录转成桶记录后添加到结果集;
size>0:根据桶记录的<offset,size>从ssd盘读取记录,反序列化,查找并更新此记录,将桶记录重新序列化后添加到结果集,构造一个索引更新对象,添加到索引更新集合,转步骤460。
步骤430:将记录添加到结果集。
将记录从桶记录中删除,将桶记录重新序列化后添加到结果集,并构造二个索引更新对象,添加到索引更新集合,转步骤460。
步骤440:将记录添加到结果集,构造一个索引更新对象,添加到索引更新集合,转步骤460。
步骤450:构造一个删除流水,添加到结果集;构造一个索引更新对象,添加到索引更新集合,转步骤460。
步骤460:统计结果集,判断写入数据能否凑成一个数据块(512KB),如果能凑成一个块,转步骤470;如果不能凑成一个块,转步骤410,继续处理剩下的记录;
步骤470:将结果集中记录整理成一个块,计算Trailer信息块,整块写入ssd;将索引更新集合提交,批量更新key cache;提交清理write cache,将已写入记录从writecache中清除。
在步骤470中,清理结果集和索引更新集合,返回步骤410继续处理剩下的记录。
请一并参阅图7,是本发明实施例的数据存储方法的块回收的流程图。本发明数据存储方法的块回收包括以下步骤:
步骤500:根据block cache找到2个有效数据长度均小于256KB的数据块;
步骤510:从ssd盘上读取步骤500中选取的2个数据块;
步骤520:解析2个数据块,根据key cache信息剔除过时数据,将有效数据合并成一个数据块;
步骤530:重新计算新数据块的Trailer信息块,写入时间设置为两个老数据块中较新的时间戳;
步骤540:写入新的数据块;
步骤550:在key cache中更新新数据块中记录的索引;在block cache中重置两个老的数据块信息,更新新写入的数据块的信息。
请参阅图8,是本发明实施例的数据存储系统的结构示意图。本发明实施例的数据存储系统包括磁盘、内存、资源划分模块、逻辑对象划分模块和数据块划分模块。
资源划分模块将磁盘和内存资源划分成小表(Tablet),其中,每个小表独立工作,小表通过Hash哈希和记录索引相结合的方式对磁盘中的记录进行索引。在本发明的实施方式种,假设一个小表的资源是由磁盘上物理地址连续的2GB空间和内存中16MB的共享内存空间组成。
逻辑对象划分模块将小表的内存空间划分为不同的逻辑对象,表的内存空间划分为3个逻辑对象:记录索引缓存KeyCache、写缓存WriteCache和块缓存BlockCache,其中:KeyCache占用12MB空间,包括桶索引和大记录索引两部分,其用于存储记录的索引信息,记录对应的也分为桶记录和大记录两种类型,在本发明另一实施方式中,KeyCache可以仅包括大记录索引部分,记录也可以仅为大记录一种类型。记录的索引查找需要计算hash(key)%(300*1024)的值,从而获取到一条桶记录索引,根据桶记录索引的桶头字段定位到一个大记录索引,用大记录索引的next字段遍历整条链,比对key查找到记录的索引;若大记录索引不命中,取桶记录索引为记录的索引。WriteCache占用约4MB空间,用做记录写缓冲,实现数据异步落磁盘,BlockCache占用64KB,由4000个16字节的块结构描述符组成,用作统计块状态信息。块的有效size字段表示,块中记录未发生更新的记录的总大小;块更新时间字段表示块写入磁盘的时间;块next字段用于将空闲块和待回收块用链表组织起来,链接成空闲块链(free链)和回收块链(recycle链)。WriteCache是基于共享内存的哈希图(HashMap)。
数据块划分模块将小表的磁盘空间按固定大小划分成多个等大的数据块,在本发明实施方式中,假设块大小为512KB,每个数据块的数据组织结构如下:
每个<checksum,keylen,key,vallen,value>5元组描述存储在数据块内的一条记录,记录在数据块内紧凑排列,在块的尾部用定长信息块(Trailer信息块)描述块的元信息,如块的数据校验、块写入时间和块内的记录数。
请参阅图9,是本发明实施例的数据存储服务器的结构示意图。本发明实施例的数据存储系统包括磁盘和内存。
磁盘和内存资源划分成小表(Tablet),其中,每个小表独立工作,小表通过Hash哈希和记录索引相结合的方式对磁盘中的记录进行索引。在本发明的实施方式种,假设一个小表的资源是由磁盘上物理地址连续的2GB空间和内存中16MB的共享内存空间组成。
小表的内存空间划分为不同的逻辑对象,表的内存空间划分为3个逻辑对象:记录索引缓存KeyCache、写缓存WriteCache和块缓存BlockCache,其中:KeyCache占用12MB空间,包括桶索引和大记录索引两部分,其用于存储记录的索引信息,记录对应的也分为桶记录和大记录两种类型,在本发明另一实施方式中,KeyCache可以仅包括大记录索引部分,记录也可以仅为大记录一种类型。记录的索引查找需要计算hash(key)%(300*1024)的值,从而获取到一条桶记录索引,根据桶记录索引的桶头字段定位到一个大记录索引,用大记录索引的next字段遍历整条链,比对key查找到记录的索引;若大记录索引不命中,取桶记录索引为记录的索引。WriteCache占用约4MB空间,用做记录写缓冲,实现数据异步落磁盘,BlockCache占用64KB,由4000个16字节的块结构描述符组成,用作统计块状态信息。块的有效size字段表示,块中记录未发生更新的记录的总大小;块更新时间字段表示块写入磁盘的时间;块next字段用于将空闲块和待回收块用链表组织起来,链接成空闲块链(free链)和回收块链(recycle链)。WriteCache是基于共享内存的哈希图(HashMap)。
小表的磁盘空间按固定大小划分成多个等大的数据块,在本发明实施方式中,假设块大小为512KB,每个数据块的数据组织结构如下:
每个<checksum,keylen,key,vallen,value>5元组描述存储在数据块内的一条记录,记录在数据块内紧凑排列,在块的尾部用定长信息块(Trailer信息块)描述块的元信息,如块的数据校验、块写入时间和块内的记录数。
本发明实施例的数据存储系统及方法通过划分存储服务器上的磁盘和内存资源为一个个独立的小表,将小表用作业务资源分配和管理的基本单元,可实现单机资源在多个业务上的复用;另外,本发明实施例的数据存储系统及方法通过合并写、块回收的方式减少对磁盘IO的随机写入;读取记录时,根据内存中的记录索引通过一次磁盘IO实现记录的获取。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (12)
1.一种数据存储方法,包括:
将磁盘和内存资源划分成小表;
将小表的内存空间划分为不同的逻辑对象,所述小表内存空间划分的逻辑对象包括:记录索引缓存、写缓存和块缓存;所述记录索引缓存用于存储记录的索引信息;所述写缓存用于记录写缓冲;所述块缓存由块结构描述符组成,用于统计块状态信息;
将小表的磁盘空间按固定大小划分成多个等大的数据块;
所述数据存储方法的块合并写包括:定时从写缓存中取记录;对每个记录读取关键词缓存及磁盘,判断记录写场景;统计结果集,判断写入数据能否凑成一个数据块,如果写入数据能够凑成一个块,将结果集中记录整理成一个块;如果写入数据不能凑成一个块,则继续处理剩下的记录。
2.根据权利要求1所述的数据存储方法,其特征在于,所述记录索引缓存包括桶索引和大记录索引,大于设定的记录大小阀值的记录采用大记录索引,在大记录索引中,记录采用独立索引;小于设定的记录大小阀值的记录采用桶索引,将桶打包成记录存储,形成桶记录;所述大于设定的记录大小阀值的记录为大记录,所述小于设定的记录大小阀值的记录为小记录。
3.根据权利要求1所述的数据存储方法,其特征在于,所述数据块的数据组织结构包括序列和定长信息块,所述序列用于描述存储在数据块内的记录,所述定长信息块用于描述块的元信息,所述元信息包括块的数据校验、块写入时间和块内的记录数。
4.根据权利要求2所述的数据存储方法,其特征在于,所述数据存储方法的记录读包括:读写缓存,根据关键字从写缓存查找记录,如果找到记录,直接返回;从记录索引缓存获取记录索引,根据所述记录索引获取记录偏移地址和记录大小;根据索引中的偏移地址和记录大小,从磁盘读取数据。
5.根据权利要求2所述的数据存储方法,其特征在于,所述数据存储方法的记录修改包括:读写缓存,根据关键词从写缓存中查找记录;判断是否找到相应记录,如果找到记录,在写缓存中更新记录并返回;如果没有找到记录,则将记录添加到写缓存。
6.根据权利要求2所述的数据存储方法,其特征在于,所述数据存储方法的块合并写判断记录写场景包括:如果是小记录更新或删除,更新后记录小于一预定值,则根据桶记录的尺寸将记录转成桶记录后添加到结果集或将桶记录重新序列化后添加到结果集;如果是小记录更新,更新后此记录大于一预定值,将记录从桶记录中删除,将桶记录重新序列化后添加到结果集,并构造二个索引更新对象,添加到索引更新集合;如果是大记录更新,将记录添加到结果集,构造索引更新对象,添加到索引更新集合;如果是大记录删除,构造删除流水,添加到结果集,构造索引更新对象,添加到索引更新集合。
7.根据权利要求3所述的数据存储方法,其特征在于,所述数据存储方法的块合并写包括:根据块缓存找到2个有效数据长度均小于预定大小的数据块;从磁盘上读取找到的数据块;解析数据块,根据关键词缓存信息剔除过时数据,将有效数据合并成一个数据块;重新计算新数据块的定长信息块,写入时间设置为两个老数据块中较新的时间戳;写入新的数据块;在关键词缓存中更新新数据块中记录的索引;在块缓存中重置两个老的数据块信息,更新新写入的数据块的信息。
8.一种数据存储系统,包括磁盘和内存资源,其特征在于,还包括资源划分模块、逻辑对象划分模块和数据块划分模块,所述资源划分模块将磁盘和内存资源划分成小表;逻辑对象划分模块将小表的内存空间划分为不同的逻辑对象,所述小表内存空间划分的逻辑对象包括:记录索引缓存、写缓存和块缓存;所述记录索引缓存用于存储记录的索引信息;所述写缓存用于记录写缓冲;所述块缓存由块结构描述符组成,用于统计块状态信息;数据块划分模块将小表的磁盘空间按固定大小划分成多个等大的数据块;
所述数据存储系统还包括块合并写模块,所述块合并写模块用于定时从写缓存中取记录;对每个记录读取关键词缓存及磁盘,判断记录写场景;统计结果集,判断写入数据能否凑成一个数据块,如果写入数据能够凑成一个块,将结果集中记录整理成一个块;如果写入数据不能凑成一个块,则继续处理剩下的记录。
9.根据权利要求8所述的数据存储系统,其特征在于,所述记录索引缓存包括桶索引和大记录索引,大于设定的记录大小阀值的记录采用大记录索引,在大记录索引中,记录采用独立索引;小于设定的记录大小阀值的记录采用桶索引,将桶打包成记录存储。
10.根据权利要求8或9所述的数据存储系统,其特征在于,所述数据块的数据组织结构包括序列和定长信息块,所述序列用于描述存储在数据块内的记录,所述定长信息块用于描述块的元信息,所述元信息包括块的数据校验、块写入时间和块内的记录数。
11.一种数据存储服务器,包括磁盘和内存资源,所述磁盘和内存资源划分成小表;所述小表的内存空间划分为不同的逻辑对象;所述小表内存空间划分的逻辑对象包括:记录索引缓存、写缓存和块缓存;所述记录索引缓存用于存储记录的索引信息;所述写缓存用于记录写缓冲;所述块缓存由块结构描述符组成,用于统计块状态信息;小表的磁盘空间按固定大小划分成多个等大的数据块;
所述数据存储服务器进行块合并写包括:定时从写缓存中取记录;对每个记录读取关键词缓存及磁盘,判断记录写场景;统计结果集,判断写入数据能否凑成一个数据块,如果写入数据能够凑成一个块,将结果集中记录整理成一个块;如果写入数据不能凑成一个块,则继续处理剩下的记录。
12.根据权利要求11所述的数据存储服务器,其特征在于,所述数据块的数据组织结构包括序列和定长信息块,所述序列用于描述存储在数据块内的记录,所述定长信息块用于描述块的元信息。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210264003.7A CN103577339B (zh) | 2012-07-27 | 2012-07-27 | 一种数据存储方法及系统 |
US14/413,049 US9323685B2 (en) | 2012-07-27 | 2013-07-26 | Data storage space processing method and processing system, and data storage server |
PCT/CN2013/080180 WO2014015828A1 (zh) | 2012-07-27 | 2013-07-26 | 数据存储空间的处理方法、处理系统及数据存储服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210264003.7A CN103577339B (zh) | 2012-07-27 | 2012-07-27 | 一种数据存储方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103577339A CN103577339A (zh) | 2014-02-12 |
CN103577339B true CN103577339B (zh) | 2018-01-30 |
Family
ID=49996615
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210264003.7A Active CN103577339B (zh) | 2012-07-27 | 2012-07-27 | 一种数据存储方法及系统 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9323685B2 (zh) |
CN (1) | CN103577339B (zh) |
WO (1) | WO2014015828A1 (zh) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9152342B1 (en) * | 2013-04-16 | 2015-10-06 | Emc Corporation | Read-write access in a read-only environment |
JP2015204073A (ja) * | 2014-04-16 | 2015-11-16 | キヤノン株式会社 | 情報処理装置、情報処理端末、情報処理方法およびプログラム |
CN104111899A (zh) * | 2014-07-03 | 2014-10-22 | 北京思特奇信息技术股份有限公司 | 一种缓存数据的存储方法及系统及读取方法 |
CN104199892B (zh) * | 2014-08-26 | 2018-01-30 | 上海爱数信息技术股份有限公司 | 一种基于压缩合并异步更新的索引读写方法 |
CN104408128B (zh) * | 2014-11-26 | 2017-11-03 | 上海爱数信息技术股份有限公司 | 一种基于b+树异步更新索引的读优化方法 |
CN104679898A (zh) * | 2015-03-18 | 2015-06-03 | 成都汇智远景科技有限公司 | 一种大数据访问方法 |
CN105574128A (zh) * | 2015-12-12 | 2016-05-11 | 天津南大通用数据技术股份有限公司 | 商业智能系统数据完成复杂运算的方法 |
CN107193857B (zh) * | 2016-03-15 | 2021-01-01 | 阿里巴巴集团控股有限公司 | 一种用于数据库遍历的方法与设备 |
CN107015763A (zh) * | 2017-03-03 | 2017-08-04 | 北京中存超为科技有限公司 | 混合存储系统中ssd管理方法及装置 |
JP6754319B2 (ja) * | 2017-05-25 | 2020-09-09 | 日本電信電話株式会社 | ブロックチェーン更新システム、サーバ装置、クライアント装置、ブロックチェーン更新方法、およびプログラム |
CN107197191B (zh) * | 2017-05-27 | 2021-05-11 | 深圳市景阳科技股份有限公司 | 网络硬盘录像的写入方法和装置 |
CN109753224B (zh) * | 2017-11-03 | 2022-05-13 | 浙江宇视科技有限公司 | 存储结构及存储结构配置方法 |
CN110658978B (zh) * | 2018-06-28 | 2022-11-01 | 杭州海康威视系统技术有限公司 | 数据处理方法、装置、电子设备及可读存储介质 |
CN111190908B (zh) * | 2018-11-15 | 2023-09-22 | 华为技术有限公司 | 一种数据管理方法、装置及系统 |
CN109726176B (zh) * | 2018-12-11 | 2022-12-06 | 河南辉煌科技股份有限公司 | 铁路信号电气设备数据的快速存储与查询方法 |
CN109783019B (zh) * | 2018-12-28 | 2022-08-19 | 上海威固信息技术股份有限公司 | 一种数据智能存储管理方法与装置 |
CN110795407B (zh) * | 2019-10-14 | 2022-06-10 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 适用于分布式文件系统的文件随机写方法及系统 |
CN111400302B (zh) * | 2019-11-28 | 2023-09-19 | 杭州海康威视系统技术有限公司 | 连续存储数据的修改方法、装置和系统 |
CN111338569A (zh) * | 2020-02-16 | 2020-06-26 | 西安奥卡云数据科技有限公司 | 一种基于直接映射的对象存储后端优化方法 |
CN111399780B (zh) * | 2020-03-19 | 2021-08-24 | 蚂蚁金服(杭州)网络技术有限公司 | 一种数据的写入方法、装置以及设备 |
CN111651404A (zh) * | 2020-04-26 | 2020-09-11 | 浙江吉利汽车研究院有限公司 | 传感器数据存储、读取方法及数据存储、读取装置 |
CN111639076B (zh) * | 2020-05-14 | 2023-12-22 | 民生科技有限责任公司 | 一种跨平台高效键值存储方法 |
CN111813347B (zh) * | 2020-07-24 | 2022-06-07 | 济南浪潮数据技术有限公司 | 垃圾回收空间管理方法、装置及计算机可读存储介质 |
CN112817767B (zh) * | 2021-02-24 | 2021-11-16 | 上海交通大学 | 分离可组合式架构下的图计算工作集优化实现方法及系统 |
CN113192558A (zh) * | 2021-05-26 | 2021-07-30 | 北京自由猫科技有限公司 | 用于第三代基因测序数据的读写方法及分布式文件系统 |
CN113625952A (zh) * | 2021-06-30 | 2021-11-09 | 济南浪潮数据技术有限公司 | 一种对象存储方法、装置、设备及存储介质 |
CN114115738B (zh) * | 2021-11-23 | 2023-12-26 | 烽火通信科技股份有限公司 | 一种基于分布式存储的磁盘空间管理方法及系统 |
CN114741449A (zh) * | 2022-04-14 | 2022-07-12 | 上海川源信息科技有限公司 | 一种基于分布式数据库的对象存储方法及装置 |
CN116991336B (zh) * | 2023-09-26 | 2024-01-23 | 北京大道云行科技有限公司 | 分布式全闪对象存储系统的gc方法及电子设备、存储介质 |
CN117270789B (zh) * | 2023-10-25 | 2024-02-06 | 苏州元脑智能科技有限公司 | 一种基于分布式存储的数据控制方法、系统及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6845427B1 (en) * | 2002-10-25 | 2005-01-18 | Western Digital Technologies, Inc. | Disk drive allocating cache segments by mapping bits of a command size into corresponding segment pools |
CN1936864A (zh) * | 2005-09-22 | 2007-03-28 | 康佳集团股份有限公司 | 不定长记录的数据组织方法 |
CN101169761A (zh) * | 2007-12-03 | 2008-04-30 | 腾讯数码(天津)有限公司 | 大容量缓存实现方法及存储系统 |
CN101178693A (zh) * | 2007-12-14 | 2008-05-14 | 沈阳东软软件股份有限公司 | 一种数据缓存方法及系统 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5649151A (en) * | 1992-06-29 | 1997-07-15 | Apple Computer, Inc. | Efficient method and apparatus for access and storage of compressed data |
US20120124285A1 (en) * | 2003-08-14 | 2012-05-17 | Soran Philip E | Virtual disk drive system and method with cloud-based storage media |
JP5076411B2 (ja) * | 2005-11-30 | 2012-11-21 | ソニー株式会社 | 記憶装置、コンピュータシステム |
US7885932B2 (en) * | 2006-11-01 | 2011-02-08 | Ab Initio Technology Llc | Managing storage of individually accessible data units |
CN101799788B (zh) * | 2010-03-23 | 2014-06-11 | 中兴通讯股份有限公司 | 一种分级管理存储资源的方法及系统 |
US20110283044A1 (en) * | 2010-05-11 | 2011-11-17 | Seagate Technology Llc | Device and method for reliable data storage |
-
2012
- 2012-07-27 CN CN201210264003.7A patent/CN103577339B/zh active Active
-
2013
- 2013-07-26 US US14/413,049 patent/US9323685B2/en active Active
- 2013-07-26 WO PCT/CN2013/080180 patent/WO2014015828A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6845427B1 (en) * | 2002-10-25 | 2005-01-18 | Western Digital Technologies, Inc. | Disk drive allocating cache segments by mapping bits of a command size into corresponding segment pools |
CN1936864A (zh) * | 2005-09-22 | 2007-03-28 | 康佳集团股份有限公司 | 不定长记录的数据组织方法 |
CN101169761A (zh) * | 2007-12-03 | 2008-04-30 | 腾讯数码(天津)有限公司 | 大容量缓存实现方法及存储系统 |
CN101178693A (zh) * | 2007-12-14 | 2008-05-14 | 沈阳东软软件股份有限公司 | 一种数据缓存方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
WO2014015828A1 (zh) | 2014-01-30 |
CN103577339A (zh) | 2014-02-12 |
US20150193350A1 (en) | 2015-07-09 |
US9323685B2 (en) | 2016-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103577339B (zh) | 一种数据存储方法及系统 | |
CN102364474B (zh) | 用于机群文件系统的元数据存储系统和管理方法 | |
CN110825748B (zh) | 利用差异化索引机制的高性能和易扩展的键值存储方法 | |
CN100498740C (zh) | 一种数据缓存处理方法、系统及数据缓存装置 | |
CN102722449B (zh) | 基于SSD的Key-Value型本地存储方法及系统 | |
Teng et al. | LSbM-tree: Re-enabling buffer caching in data management for mixed reads and writes | |
CN107003937A (zh) | 针对大型工作数据集的缓存优化技术 | |
CN102436420A (zh) | 使用辅助存储器的低ram空间、高吞吐量的持久键值存储 | |
CN101799783A (zh) | 一种数据存储处理方法、查找方法及其装置 | |
CN103019958A (zh) | 使用数据属性来管理固态存储器里的数据的方法 | |
CN107491523A (zh) | 存储数据对象的方法及装置 | |
CN105912687A (zh) | 海量分布式数据库存储单元 | |
CN103019887A (zh) | 数据备份方法及装置 | |
CN102314397A (zh) | 缓存数据块的处理方法 | |
CN103150136A (zh) | 基于ssd的大容量缓存中的lru策略实现方法 | |
CN110309233A (zh) | 数据存储的方法、装置、服务器和存储介质 | |
CN102999428A (zh) | 一种瓦记录磁盘的四级编址方法 | |
CN104050057B (zh) | 一种历史感知的数据去重碎片消除方法与系统 | |
CN104156432A (zh) | 一种文件访问方法 | |
CN116257523A (zh) | 一种基于非易失存储器的列式存储索引方法及装置 | |
CN102955787A (zh) | 一种文件目录表的使用方法、文件写入方法及应用的主电路板、cpu和外部存储器 | |
Liang et al. | Enabling a B+-tree-based data management scheme for key-value store over SMR-based SSHD | |
Doekemeijer et al. | Key-Value Stores on Flash Storage Devices: A Survey | |
Hua et al. | PMSort: An adaptive sorting engine for persistent memory | |
Fevgas et al. | HyR-tree: a spatial index for hybrid flash/3D XPoint storage |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |