CN106503084A - 一种面向云数据库的非结构化数据的存储与管理方法 - Google Patents

一种面向云数据库的非结构化数据的存储与管理方法 Download PDF

Info

Publication number
CN106503084A
CN106503084A CN201610884272.1A CN201610884272A CN106503084A CN 106503084 A CN106503084 A CN 106503084A CN 201610884272 A CN201610884272 A CN 201610884272A CN 106503084 A CN106503084 A CN 106503084A
Authority
CN
China
Prior art keywords
data
row
index
record
storage
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
CN201610884272.1A
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.)
Institute of Software of CAS
Original Assignee
Institute of Software of CAS
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 Institute of Software of CAS filed Critical Institute of Software of CAS
Priority to CN201610884272.1A priority Critical patent/CN106503084A/zh
Publication of CN106503084A publication Critical patent/CN106503084A/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/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML

Landscapes

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

Abstract

本发明属于非结构化云存储管理研究与应用领域,具体涉及一种面向云数据库的非结构化数据存储与管理方法。针对云环境中,以json数据为代表的非结构话数据底层存储特点,本发明基于虚拟分块的方式实现非定长数据记录的分割与基本存储,通过虚拟分块的链表关系实现数据记录的排序与提取。同时,为存储分块建立索引,实现存储空间的碎片回收与数据记录的倒排索引。通过本发明的数据存储管理技术,可以有效满足海量、非结构化数据应用场景下,数据库底层数据高性能读写的要求。同时,可以提高存储空间利用效率。本发明在互联网数据库、云化服务集成环境、物联网等方面具有积极的应用价值。

Description

一种面向云数据库的非结构化数据的存储与管理方法
技术领域
本发明属于非结构化云存储管理研究与应用领域,具体涉及一种面向云数据库的非结构化数据存储与管理方法。
背景技术
近年来,随着物联网、互联网的发展,信息系统处理、交换的数据在形态上发生较大变换,非结构化数据逐渐成为信息系统内部以及信息系统之间互操作的载体,例如json数据、xml数据等。这些数据在语义表达上具有部分确定性,在数据的长度上存在较强的不确定性。由于非结构化数据的特点导致其底层基本操作方面的效率存在一定制约,由此形成云化信息系统的瓶颈。非机构化数据的存储管理也逐渐成为数据库领域重要研究与发展方向。
数据的存储与管理除了数据写入外,还包括数据的删除与更新等基本操作。关系数据库是传统信息系统中实现数据存储、管理的主要工具。关系数据库以关系代数为基础,通过数据建模实现结构化定义。这一结构化本质上是为数据的语义表达与数据长度进行确定性的处理。在数据增量过程中,根据这一确定性的结构定义实现数据的读写操作组织。数据库在底层操作过程中,为数据建立rowIndex,以散列处理的方式,在数据存储分块(dBlock)中建立存储位置指针与rowIndex之间确定性的映射关系。由于数据在结构与长度上具有确定性的特点。因此在dBlock中空间利用效率较高。同时,在数据的更新与删除操作中,一条数据记录在dBlock中的内容变化不会影响其它数据记录的存储位置,存储分块中的碎片回收简单,且空间利用效率较高。
在云存储环境中,大量数据以非结构化的形式存在。一条数据记录的长度无法在数据模型中确定性的描述。在数据写入过程中,由于数据记录的存储空间长度无法确定,导致其位置不能通过散列操作建立存储指针与rowIndex之间的映射关系,无法在实现非结构化数据的正确基本读写操作。
云环境中上述存储管理基本问题逐渐引起研究人员的注意。2000年以来,Google等一批研究机构以云计算为基础,先后推出键值(key-value)数据库为代表的大数据存储、查询解决方案。基于key-value的的云数据存储查询技术具有高可扩展性、高可用性和容错性等特点,能够实现对海量数据的高效存储与查询的目的。在云数据库底层存储中,数据记录以序列的方式在dBlock中一次写入。同时,以rowIndex建立底层倒排索引,实现数据记录在dBlock中存储位置的记录。在数据读取过程中,利用这一倒排索引实现数据记录的检索、定位与提取。这一方式具有结构简单,空间利用率高的优势。将底层倒排索引与散列相结合能有效提高检索效率,数据记录的提取受数据集规模大小的影响较小。
上述非结构化数据底层存储存储管理技术在数据只有简单的增量与查询场景中表现较好。然而,在多数信息系统中,数据除了简单读写外还具有更新、删除操作的要求。在这一场景中,上述手段的适应性存在一定问题。在数据更新、删除操作过程中,由于数据记录在操作前后占用空间长度的变化,在dBlock中形成较多的碎片。为了提高空间利用率就需要进行碎片回收。在碎片回收过程中,形成大量的数据搬运、迁移以及对应指针与索引的更新操作,导致数据存储管理的效率较低,不能满足云环境中应用对数据底层读写的要求。
发明内容
围绕上述问题,本发明提出一种面向云数据库的非结构化数据的存储与管理方法。
本发明的面向云数据库的非结构化数据的存储与管理方法中,数据存储由数据块(dBlock)、块占用索引(dBlockFreeIdx)、行占用索引(vLineIdx)与数据记录索引(dIdx)构成。dBlock由一组长度确定的虚数据行(vLine)构成。vLine由行存储信息、存储链首位指针以及有效存储空间构成。其中行存储信息用于记录当前行的类型、数据记录指针、数据记录长度、以及当前虚数据行的有效存储数据的字节长度。存储链首位指针用于记录当前数据记录占用的存储链中下一个vLine的指针位置。行占用索引采用位图索引的方式标记dBlock中vLine的空间占用状态。
在非结构化数据存储过程中,根据其长度计算所占用的vLine数量,从行占用索引vlineIdx中获取未被占用的首个vLine位置,而后将当前数据写入该vLine中,如果当前数据记录的长度超过一条vLine的容纳空间,则在dBlock中继续获取未被占用的vLine,继续写入,直到全部数据写入dBlock中对应的vLine集中。同时,在vLine之间的存储链之间建立链接关系,实现数据提取过程中的定位。完成数据写入后,更新对应的vlineIdx与数据记录索引dIdx信息。
在数据提取过程中,扫描dBlock中vLine,过滤识别其中数据记录的首行信息,实现数据记录的提取。在这一过程中如果数据记录长度超过vLine的长度,则根据vLine尾部存储链指针定位下一个的vLine的位置继续提取,直到全部数据提取完成。
在数据更新操作过程中,根据数据长度的变换调整其所占用的vLine数量并变更其中的记录内容。同时更新vLineIdx中的占用信息。
在碎片回收过程中,以vLine为单位进行回收。在回收过程中仅需修改被回收vLine的首尾信息同时变更该vLine在vLineIdx中位图对应字节值即可。
本发明的有益效果如下:
针对云环境中,以json数据为代表的非结构化数据底层存储特点,本发明基于虚拟分块的方式实现非定长数据记录的分割与基本存储,通过虚拟分块的链表关系实现数据记录的排序与提取;同时,为存储分块建立索引,实现存储空间的碎片回收与数据记录的倒排索引。通过本发明的数据存储管理技术,可以有效满足海量、非结构化数据应用场景下,数据库底层数据高性能读写的要求。同时,可以提高存储空间利用效率。这一方法在互联网、云化服务集成环境、物联网等方面具有积极的应用价值。
附图说明
图1存储结构示意图。
图2数据块存储模型示意图。
图3虚数据行示意图。
图4数据接入执行流程图。
图5索引维护执行流程图。
图6块占用索引维护过程图。
图7数据记录索引维护过程图。
图8数据删除过程图。
图9数据记录长度小于虚拟行长度更新过程图。
图10数据记录长度大于虚数据行长度更新过程图。
图11数据提取过程图。
具体实施方式
针对海云协同工作平台操作行为数据的高效存取和修改的需求,本发明提出一种高性能的非结构化数据存储与索引技术。这一技术在底层实现对非结构化数据的高效存储。同时,在存储过程中,根据数据长度的不同进行倒排序索引的维护。利用倒排序索引,实现数据的快速更新和删除操作。在这一基础上,根据索引数据实现数据的高效提取。其整体的存储架构如图1,具体实施内容如下:
一.数据模型
在数据增量过程中,将数据记录以非结构化的方式实现底层存储。针对数据接入的过程,有如下定义:
存储页
dataPage={dBlockFreeIdx,dBlocki|i=1,2,…n}
存储页,包含dBlockFreeIdx和dBlock两个部分。其中,dBlockFreeIdx表示块占用索引,用以记录当前存储页的各个数据块是否存在空闲的存储空间。dBlock表示数据块,用于实际存储数据。一个存储页包含多个数据块,数据块的个数和大小可根据实际情况进行设定。
数据块
dBlock={vLinei|i=1,2,…,MaxLineNum}
数据块为实际数据存储的基本单元。vLine表示虚数据行,每个数据块内存储多条虚数据行(图1中HEOF表示行首起始符,datacache表示虚数据行存储空间,TEOF表示行尾截止符)。若以MaxLineNum表示数据块存储的最大行数,以MaxDBlock表示数据块的最大容量,以VLineLength表示vLine的最大长度,则存在以下关系:
其中,MaxDBlock建议取值为VLineLength的整数倍。
本发明根据实际使用情况,将数据块的容量MaxDBlock设置为1024K,虚数据行的最大长度VLineLength设置为256Byte,则数据块存储的最大行数MaxLineNum的值为4096。
如图2所示,即为本例中的数据块存储模型。
虚数据行
vLine={type,head,length,curLength,next,content}
虚数据行表示实际存储在数据块中的当前数据的虚行信息。数据记录映射成虚数据行后,执行实际的存储操作。一条数据记录可以映射成n行vLine,其中n满足n>=1且n<=MaxLineNum。如图3所示,为vLine的存储结构。
其中:
type表示vLine的类型,用于标记该vLine是否为数据记录存储的首行。type预留位占据1位存储空间,0表示非数据记录首行,1表示数据记录首行。
head表示行首预留位,记录当前vLine所属的数据记录的首个虚数据行的存储位置。行首预留位存储的最大值为最后一行vLine的起始位置,其值为1024K-256Byte+1即220-28+1,故本例中head占用20位存储空间。
length表示当前数据记录的总长度,本例中一个数据块的最大容量为1024K=220Byte,故数据记录的最大长度必然小于220Byte,本例中length占用20位存储空间。
curLength表示当前数据记录在本条vLine内的实际有效长度,本例中的curLength<256Byte即28Byte,故本例中curLength占用8位存储空间。
next表示行尾预留位,记录当前数据记录的下一条vLine的起始位置。若当前vLine为最后一行,则置为空值,否则记录下一条vLine的起始位置。next记录的最大值为最后一行vLine的起始位置,其值的计算过程和head相同,本例中分配20位存储空间。
content表示当前vLine存储的有效数据,本例中的长度为256Byte-(1+20+20+8+20)bit,即247字节。
因此,vLine的实际长度为247Byte+(1+20+20+8+20)bit=256Byte-3bit,故每行vLine比预期的256Byte少占用3位存储空间,每个数据块dBlock比预期的1024K存储空间少占用1.5K,实际的存储空间为1022.5K。
数据记录
data表示数据记录,是待接入的原始数据,是满足一定规则条件的合法的非结构化字节流。其字节流长度小于等于一个数据块存储的有效字节流的总长度。
块占用索引
dBlockFreeIdx表示块占用索引,用以记录当前存储页的各个数据块是否存在空闲的存储空间。块占用索引是以位图的方式记录各个数据块的空闲存储空间是否占用。以0表示当前数据块不存在空闲存储空间,以1表示当前数据块存在空闲空间,每个数据块占用一位数据位来记录当前数据块是否存在空闲数据空间。
块索引
dBlockIdx={vLineIdx,dIdx}
块索引表示数据块的索引信息,包含行占用索引和数据记录索引两部分。其中,vLindIdx表示行占用索引,dIdx表示数据记录索引。
行占用索引
vLineIdx表示行占用索引,是以位图的方式记录当前数据块的虚数据行是否被占用。以0表示当前行未被占用,以1表示当前行被占用。行占用索引文件以MaxLineNum位存储空间表示。
数据记录索引
dIdx={(i,loc,len)i|i=1,2,……n}
数据记录索引用于记录第i条数据记录在数据块dBlock中存储的虚数据行vLine的起始位置。其中,i为数据记录序列中第i条记录;loc表示块索引指针,指向数据块中存储的虚数据行的起始位置;len表示该数据记录的总长度。
数据写入的过程如下:
1.接收原始数据data,获取数据记录的序号i,并计算data的长度len及所需的存储空间的大小。
needSpace=getSpace(data),表示存储data所需要的存储空间的大小。
2.获取当前数据存储页,定位当前的数据存储块;
dBlock=getCurDBlock,
freeSpace=getFreeSpace(dBlock),
firstLine=getFirstFreeLine(dBlock),
其中,freeSpace满足freeSpace>=needSpace,firstLine表示dBlock中的首个空行行号。
3.在当前的数据存储块中存储数据data;
pos(data)=storeData(data,dBlock)=data→dBlock,
其中,pos(data)表示data存储的首行起始位置。
4.针对数据块的增量数据,更新行占用索引;
firstLine→vLineIdx,vLineIdx∈dBlock
5.针对原始数据,更新数据记录索引;
updateDIdx(i,pos(data),len)→dIdx,dIdx∈dBlock
图4中展示了这一数据接入的过程。如图所示,其流程如下:
1.首先,获取原始数据data;
2.判断原始数据data的合法性;
3.若合法,则转步骤5,否则转步骤4;
4.返回数据不合法标识,结束;
5.计算data的长度len;
6.计算data写入数据块所需要的存储空间的大小needSpace;
7.获取当前数据存储页;
8.根据数据块占用索引获取当前数据存储页中第一个空闲数据块;
9.若空闲数据块存在,则转步骤10,否则转步骤13;
10.获取当前数据块的剩余存储空间freeSpace;
11.若freeSpace>=needSpace,则转步骤16,否则转步骤12;
12.获取下一个空闲数据块,转步骤9;
13.创建新的存储数据块;
14.更新数据块占用索引;
15.新建行占用索引文件和数据记录索引文件,转步骤17;
16.获取空闲行信息;
17.原始数据data映射成虚数据行列表List<vLine>;
18.虚数据行列表List<vLine>写入数据块;
19.实现数据写入的索引的维护;
20.返回数据成功写入标识;
21.结束。
二.数据写入的索引的维护
在数据增量的过程中,通过索引的维护,实现数据的高效管理。在数据写入的过程中,需要维护的索引包括块占用索引、行占用索引以及数据记录索引。本发明通过对块占用索引的维护,实现对数据块是否存在可用存储空间进行标记。在数据写入的过程中,通过对行占用索引的读取,实现对于数据块中可用存储空间的定位。通过对数据记录索引的维护,实现对数据记录在数据块中的存储位置记录。
2.1行占用索引的维护
在数据写入数据块后,首先执行行占用索引的维护,行占用索引的维护过程如图5所示。如图所示,数据写入时的行占用索引维护的流程如下:
1.首先,获取当前数据记录写入数据块时占用的虚数据行的行号组成的数组num[];
2.获取当前数据块的行占用索引vLineIdx;
3.令i=0;
4.判断i<num.size()?若是,则转步骤5,否则转步骤7;
5.更新vLineIdx中的第num[i]位,将其值置为1;
6.令i++,转步骤4;
7.数据写入的行占用索引过程结束。
2.2块占用索引的维护
数据写入的行占用索引维护完成后,执行块占用索引的维护。块占用索引的维护过程如图6所示。如图所示,数据写入时的块占用索引维护过程如下:
1.首先,获取当前数据块的行占用索引;
2.扫描行占用索引;
3.若存在值为0的数据位,则转步骤4,否则转步骤5;
4.当前数据块存在未占用的虚数据行,不需要更新块占用索引,转步骤8;
5.当前数据块不存在未占用的虚数据行;
6.获取当前数据块的块占用索引;
7.将表示当前数据块存储状态的数据位的值置为0;
8.结束。
2.3数据记录索引的维护
数据写入的块占用索引维护完成后,执行数据记录索引的维护。数据记录索引的维护过程如图7所示。如图所示,数据写入时的数据记录索引维护过程如下:
1.首先,获取当前数据块的数据记录索引;
2.获取当前数据记录的行号i;
3.获取当前数据记录的存储位置pos(data);
4.获取当前数据记录的长度len(data);
5.获取当前数据块的数据记录索引;
6.更新数据记录索引(i,pos(data),len(data));
7.结束。
三.数据变更
在数据增量过程中,数据变更包含删除数据和写入数据操作。删除数据操作通过对原有的数据存储空间进行回收,实现数据的删除操作。删除操作并不实际执行磁盘存储空间的清空,而是在新的数据写入的过程中,实现存储空间的覆盖性写入。这种做法极大的提高了数据操作的运行效率。
3.1删除数据,存储空间回收
在数据删除的过程中,根据数据记录索引定位数据记录的实际存储位置。从数据块中获取虚数据行的信息,将该数据记录的所有虚数据行占用索引置为0,并实现数据记录索引的更新。同时,检测该数据块占用索引的值,若为非空闲,则置为空闲。这一过程如下:
1.根据行号i,从数据记录索引中查询行号为i的索引(i,loc,len);
2.从数据记录索引中清除该条索引的记录;
3.以loc的值作为入口,从数据块中定位该数据记录的所有虚行数据信息;
curVLine=get(loc),nextVLine=get(curLine.next)
首先根据loc的值获取第一个虚数据行,若当前数据行的next预留位不为null,则以next作为指针获取下一个虚数据行信息,直至next为null。
4.将所有的虚行数据的行占用索引置为0;
vLine→0
5.检测块占用索引,若为非空闲状态,则更新为空闲状态;
dBlock→1
图8中展示了删除数据的基本流程。如图所示,这一过程如下:
1.首先,获取待删除数据的行号i;
2.查询数据记录索引,获取索引(i,loc,len);
3.在数据记录索引中删除该条索引;
4.获取loc指向的虚数据行curVLine=get(loc);
5.令j=0,num[j++]=i;
6.判断curVLine==null?若是,则转步骤9,否则转步骤7;
7.获取下一虚数据行curVLine=get(curVLine.next);
8.记录当前行号num[j++],转步骤6;
9.获取当前数据块的行占用索引;
10.将num中所有行在行占用索引中表示的占用状态的值置为0;
11.检测当前数据块的块占用索引;
12.若块占用索引的状态值为0,则转步骤13,否则转步骤14;
13.将块占用索引的值置为1;
14.结束。
3.2写入数据
在本例中,虚行数据实际存储的原始数据的最大长度为249字节,因此,在数据增量过程中,根据原始数据的长度是否大于249字节,数据的写入过程将按照不同的流程实现。其流程如下:
3.2.1数据长度<=249字节
在数据增量过程中,若原始数据的长度小于等于249字节,则原始数据可以映射成一条虚数据行,其实现过程如下:
1.根据行占用索引,获取第一个空闲行
firstFreeLine=getFirstFreeLine(dBlock)
2.原始数据data映射成虚数据行vLine
vLine=data→vLine;
3.vLine写入数据块
vLine→dBlock
4.更新行占用索引
fistFreeLine→1
5.检测当前数据块的行占用索引,若全部行被占用,则更新块占用索引为非空闲数据块
dBlockFreeIdx=dBlock→0
6.数据记录索引维护
图9中展示了原始数据长度小于等于249字节的数据写入的基本流程。如图所示,这一过程如下:
1.首先,从当前数据块中获取第一个空闲行firstFreeLine;
2.根据行号获取行首位置head;
3.获取原始数据长度length,在此过程中,curLength=length;
4.原始数据data映射成vLine,其映射规则为vLine=
vLine(1,head,length,curLength,null,data);
5.vLine写入数据块;
6.更新firstFreeLine的行占用索引,将当前行占用索引置为已占用;
7.判断当前数据块是否仍存在空闲行,若存在,转步骤9,否则转步骤8;
8.更新块占用索引,将当前数据存储块置为非空闲状态;
9.数据记录索引维护,维护过程详见【2、数据写入的索引维护】部分;
10.结束。
3.2.2数据长度>249字节
在数据增量过程中,若原始数据的长度大于249字节,则原始数据可以映射成多条虚数据行,其实现过程如下:
1.首先,计算原始数据映射的虚数据行的数量
2.根据行占用索引,获取前num个空闲行
freeLines=getFreeLines(num)
3.原始数据data映射成虚数据行vLines
vLines=(data,freeLines)→vLines;
4.vLines写入数据块
vLines→dBlock
5.更新行占用索引
freeLines→1
6.检测当前数据块的行占用索引,若全部行被占用,则更新块占用索引为非空闲数据块
dBlockFreeIdx=dBlock→0
7.数据记录索引维护
图10中展示了原始数据长度大于249字节的数据写入的基本流程。如图所示,这一过程如下:
1.首先,计算原始数据data的长度length;
2.计算原始数据data映射的虚数据行的数量num;
3.根据行占用索引,获取前num个空闲行freeLines;
4.计算空闲行的其实位置heads;
5.原始数据data中截取第0至249的字节流content;
6.映射第1行vLine,vLine[0]=vLine(1,heads[0],length,249,heads[1],content);
7.令i=1;
8.i<(num-1)?若是,则转步骤9,否则转步骤12;
9.原始数据data中截取第i*249+1至(i+1)*249的字节流content;
10.映射第i+1行vLine,
vline[i]=vLine(0,heads[0],length,249,heads[i+1],content);
11.i++,转步骤8;
12.原始数据data中截取第i*249+1至末尾的字节流content;
13.获取字节流content的长度curLength;
14.映射最后一行vLine,
vLine[i]=vLine(0,heads[0],length,curLength,null,content);
15.更新行占用索引,将freeLines置为已占用;
16.判断当前数据块是否存在空闲行?若存在,则转步骤18,否则转步骤17;
17.块占用索引维护,将当前数据块状态置为非空闲;
18.数据记录索引维护;
19.结束。
四.数据提取
在数据提取的过程中,根据数据记录的行号匹配,实现数据记录索引的提取,并根据数据记录索引的信息,实现数据记录的定位。数据块中的存储的数据记录可能分布在连续或不连续的虚数据行中,以数据记录索引中记录的loc值作为数据记录提取的入口,最终实现数据记录的提取过程。这一过程由以下几个步骤完成:
1.首先,根据数据记录的行号i进行匹配,从数据记录索引中提取出数据记录索引(i,loc,length);
2.以loc值作为数据提取的入口,实现虚数据行的提取;
3.自虚数据行中提取并封装出原始数据记录data;
4.计算获取的数据记录data的长度,并和len的值进行比较,若两者相等,则返回data,数据提取流程结束;若两者不等,则返回数据提取错误标识,数据提取流程结束。
图11中展示了数据提取的基本流程。如图所示,数据记录的提取流程描述如下:
1.首先,获取数据记录行号i;
2.根据i从数据记录索引中提取(i,loc,len)索引;
3.以loc为入口,提取数据块中起始位置为loc的虚数据行vLine;
4.记res=vLine.content;
5.判断vLine.next==null?若是,则转步骤8,否则转步骤6;
6.获取起始位置为vLine.next的vLine;
7.res+=vLine.content,转步骤5;
8.计算res的长度len(res);
9.判断len(res)==len?若是,则转步骤10,否则转步骤11;
10.返回res即为所求数据记录,转步骤12;
11.返回数据提取错误标识;
12.结束。
结合以上手段,本发明提出一种面向非结构化数据的高性能的非结构化数据存储与索引技术,该技术适用于海云协同工作平台操作行为数据的高效存取和修改的需求。经过测试表明,本发明提出的技术相对于传统的关系数据库和非结构化数据库在查询上性能提升19%,空间利用率提高8%,数据更新效率提高50%。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。

Claims (10)

1.一种面向云数据库的非结构化数据的存储与管理方法,其步骤包括:
第一步:建立基于数据模型的存储架构,所述数据模型包括数据块、块占用索引、行占用索引与数据记录索引;数据块由一组长度确定的虚数据行构成,虚数据行由行存储信息、存储链首位指针以及有效存储空间构成;块占用索引是以位图的方式记录各个数据块的空闲存储空间占用状态;行占用索引采用位图索引的方式标记数据块中虚数据行的空间占用状态;数据记录索引通过行号、块索引指针、数据记录的总长度标记数据记录的索引位置;
第二步:在非结构化数据存储过程中,根据其长度计算所占用的虚数据行数量,从行占用索引中获取未被占用的首个虚数据行位置,而后将当前数据写入该虚数据行中;如果当前数据记录的长度超过一条虚数据行的容纳空间,则在数据块中继续获取未被占用的虚数据行,继续写入,直到全部数据写入数据块中对应的虚数据行集中;同时,在虚数据行之间的存储链之间建立链接关系,实现数据提取过程中的定位;
第三步:完成数据写入后,更新对应的块占用索引、行占用索引与数据记录索引信息;
第四步:在数据提取过程中,扫描数据块中的虚数据行,过滤识别其中数据记录的首行信息,实现数据记录的提取;
第五步:在数据更新操作过程中,根据数据长度的变换调整其所占用的虚数据行数量并变更其中的记录内容,同时更新块占用索引、行占用索引、数据记录索引中的占用信息;
第六步:在碎片回收过程中,以虚数据行为单位进行存储空间的回收。
2.如权利要求1所述的方法,其特征在于,所述虚数据行中,行存储信息用于记录当前行的类型、数据记录指针、数据记录长度、以及当前虚数据行的有效存储数据的字节长度;存储链首位指针用于记录当前数据记录占用的存储链中下一个虚数据行的指针位置。
3.如权利要求1所述的方法,其特征在于,一条非结构化数据记录在一组虚数据行中实现存储;当该非结构化数据记录长度小于一条虚数据行有效存储长度时,其占用一条虚数据行;当该非结构化数据记录长度大于一条虚数据行有效存储长度时,其占用的虚拟行数量由其数据长度与虚数据行有效长度的比值确定。
4.如权利要求1所述的方法,其特征在于,当一条数据记录占用多个虚数据行时,这些虚数据行首位之间通过指针形成链表关系,实现虚数据行之间的顺序链接关系。
5.如权利要求1所述的方法,其特征在于,在数据存储过程中,根据数据记录的长度计算所占用的虚数据行的数量,首先从块占用索引中获取存在剩余存储空间的数据块,利用行占用索引锁定剩余存储空间大于或等于数据记录存储所需的虚数据行数量的数据块。
6.如权利要求5所述的方法,其特征在于,根据数据块的行占用索引的标记,将数据记录映射成虚数据行列表。
7.如权利要求5所述的方法,其特征在于,在数据记录的写入完成后,更新相应的行占用状态,实现行占用索引的实时维护。
8.如权利要求7所述的方法,其特征在于,在行占用索引维护完成后,扫描行占用索引,若当前行占用索引不存在未被占用的虚数据行,则更新当前数据块的状态为全部占用。
9.如权利要求1所述的方法,其特征在于,在数据提取的过程中,从数据记录索引中获取数据记录的首行信息,扫描数据块中的虚数据行,获取首行;若数据记录的长度超过虚数据行的最大存储长度,则根据虚数据行的尾部存储指针获取下一个虚数据行的位置信息继续提取,直到全部数据提取完成。
10.如权利要求1所述的方法,其特征在于,在碎片回收的过程中,仅需修改被回收虚数据行的首尾信息同时变更该虚数据行在行占用索引中位图对应字节值即可;然后清除相应的数据记录索引,将虚数据行的占用状态置为未被占用,同时确保当前数据块的占用状态为未被全部占用。
CN201610884272.1A 2016-10-10 2016-10-10 一种面向云数据库的非结构化数据的存储与管理方法 Pending CN106503084A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610884272.1A CN106503084A (zh) 2016-10-10 2016-10-10 一种面向云数据库的非结构化数据的存储与管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610884272.1A CN106503084A (zh) 2016-10-10 2016-10-10 一种面向云数据库的非结构化数据的存储与管理方法

Publications (1)

Publication Number Publication Date
CN106503084A true CN106503084A (zh) 2017-03-15

Family

ID=58293651

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610884272.1A Pending CN106503084A (zh) 2016-10-10 2016-10-10 一种面向云数据库的非结构化数据的存储与管理方法

Country Status (1)

Country Link
CN (1) CN106503084A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107066551A (zh) * 2017-03-23 2017-08-18 中国科学院计算技术研究所 一种树状数据的行式和列式存储方法及系统
CN113157821A (zh) * 2021-04-09 2021-07-23 电子科技大学 一种适用于关系数据库的可查询加密方法
CN114020779A (zh) * 2021-10-22 2022-02-08 上海卓辰信息科技有限公司 自适应优化检索性能数据库及数据查询方法
CN118394802A (zh) * 2024-06-27 2024-07-26 国网山东省电力公司滨州市沾化区供电公司 一种电力监测数据存储管理方法、系统、设备及介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101639848A (zh) * 2009-06-01 2010-02-03 北京四维图新科技股份有限公司 一种空间数据引擎及应用其管理空间数据的方法
CN102693286A (zh) * 2012-05-10 2012-09-26 华中科技大学 一种对文件内容与元数据进行组织管理的方法
CN103257831A (zh) * 2012-02-20 2013-08-21 深圳市腾讯计算机系统有限公司 存储器的读写控制方法及对应的存储器
CN103488710A (zh) * 2013-09-10 2014-01-01 广州巨杉软件开发有限公司 大数据页中高效存储非定常数据结构
US8849833B1 (en) * 2013-07-31 2014-09-30 Linkedin Corporation Indexing of data segments to facilitate analytics
CN104346357A (zh) * 2013-07-29 2015-02-11 中国科学院声学研究所 一种嵌入式终端的文件存取方法及系统
CN105912687A (zh) * 2016-04-19 2016-08-31 江苏物联网研究发展中心 海量分布式数据库存储单元

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101639848A (zh) * 2009-06-01 2010-02-03 北京四维图新科技股份有限公司 一种空间数据引擎及应用其管理空间数据的方法
CN103257831A (zh) * 2012-02-20 2013-08-21 深圳市腾讯计算机系统有限公司 存储器的读写控制方法及对应的存储器
CN102693286A (zh) * 2012-05-10 2012-09-26 华中科技大学 一种对文件内容与元数据进行组织管理的方法
CN104346357A (zh) * 2013-07-29 2015-02-11 中国科学院声学研究所 一种嵌入式终端的文件存取方法及系统
US8849833B1 (en) * 2013-07-31 2014-09-30 Linkedin Corporation Indexing of data segments to facilitate analytics
CN103488710A (zh) * 2013-09-10 2014-01-01 广州巨杉软件开发有限公司 大数据页中高效存储非定常数据结构
CN105912687A (zh) * 2016-04-19 2016-08-31 江苏物联网研究发展中心 海量分布式数据库存储单元

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107066551A (zh) * 2017-03-23 2017-08-18 中国科学院计算技术研究所 一种树状数据的行式和列式存储方法及系统
CN107066551B (zh) * 2017-03-23 2020-04-03 中国科学院计算技术研究所 一种树状数据的行式和列式存储方法及系统
CN113157821A (zh) * 2021-04-09 2021-07-23 电子科技大学 一种适用于关系数据库的可查询加密方法
CN113157821B (zh) * 2021-04-09 2022-03-15 电子科技大学 一种适用于关系数据库的可查询加密方法
CN114020779A (zh) * 2021-10-22 2022-02-08 上海卓辰信息科技有限公司 自适应优化检索性能数据库及数据查询方法
CN114020779B (zh) * 2021-10-22 2022-07-22 上海卓辰信息科技有限公司 自适应优化检索性能数据库及数据查询方法
CN118394802A (zh) * 2024-06-27 2024-07-26 国网山东省电力公司滨州市沾化区供电公司 一种电力监测数据存储管理方法、系统、设备及介质

Similar Documents

Publication Publication Date Title
CN101533408B (zh) 一种海量数据的处理方法及处理装置
CN105989129B (zh) 实时数据统计方法和装置
CN106503084A (zh) 一种面向云数据库的非结构化数据的存储与管理方法
CN107423422B (zh) 基于网格的空间数据分布式存储及检索方法和系统
CN104238962B (zh) 向缓存中写入数据的方法及装置
CN107066393A (zh) 提高地址映射表中映射信息密度的方法
CN105912687B (zh) 海量分布式数据库存储单元
CN106599040A (zh) 一种面向云存储的分层索引方法与检索方法
CN103870492A (zh) 一种基于键排序的数据存储方法和装置
CN102314485A (zh) 哈希表添加、查找和删除方法及装置
CN100424699C (zh) 一种属性可扩展的对象文件系统
CN106445416A (zh) 一种数据记录的存储、查询和检索的方法及装置
CN106445405A (zh) 一种面向闪存存储的数据访问方法及其装置
CN106407355A (zh) 一种数据存储方法及装置
CN107924291A (zh) 存储系统
CN112380302B (zh) 基于轨迹数据的热力图生成方法、装置、电子设备以及存储介质
CN106469123A (zh) 一种基于nvdimm的写缓存分配、释放方法及其装置
CN101763415A (zh) 一种数据库的b树索引的生成方法及装置
CN109325011A (zh) 基于区块链的数据存储、处理、分享方法及系统
CN104077078B (zh) 读存储区、更新存储区的方法及装置
CN206021244U (zh) 一种分布式计算机集群下的数据采集系统
CN107846327A (zh) 一种网管性能数据的处理方法及装置
CN110020272A (zh) 缓存方法、装置以及计算机存储介质
CN104778100A (zh) 一种安全备份数据的方法
CN106547484A (zh) 一种基于raid5的实现内存数据可靠性方法及系统

Legal Events

Date Code Title Description
C06 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
RJ01 Rejection of invention patent application after publication

Application publication date: 20170315