CN102411634B - 一种提升嵌入式数据库实时性的数据存储方法 - Google Patents
一种提升嵌入式数据库实时性的数据存储方法 Download PDFInfo
- Publication number
- CN102411634B CN102411634B CN201110445187.2A CN201110445187A CN102411634B CN 102411634 B CN102411634 B CN 102411634B CN 201110445187 A CN201110445187 A CN 201110445187A CN 102411634 B CN102411634 B CN 102411634B
- Authority
- CN
- China
- Prior art keywords
- affairs
- database
- priority
- time
- bitmap
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种提升嵌入式数据库实时性的数据存储方法。该方法中,数据库文件存储空间分为四部分,依次包含数据库头信息、对象索引、位图页和其它对象占用空间,其中,对象索引是以对象标识为下标的对象数组。本发明通过对象位图结合的对象存储技术,提高了数据库的存储效率。通过对象位图访问数据库对象的方式,可以在实现时使用数组,以提高元数据的访问速度。特别是在数据库容量相对较小的应用场景下,这种方法可以大大提升访问速度。
Description
技术领域
本发明涉及一种数据库数据存储方法,尤其涉及一种提升嵌入式数据库实时性的数据存储方法,属于嵌入式实时数据库技术领域。
背景技术
随着嵌入式系统的广泛应用及嵌入式实时操作系统的不断普及,嵌入式环境下的数据管理问题成为系统中的重要环节,构建嵌入式实时数据库系统成为嵌入式开发中必须解决的问题。这里所说的嵌入式是指可在嵌入式设备中独立运行的一种数据库系统,用以处理大量的、时效性强且有严格时序的数据,它以高可靠性、高实时性和高信息吞吐量为目标,其数据的正确性不仅依赖于逻辑结果,而且依赖于逻辑结果产生的时间。
目前嵌入式环境下的数据库系统多数采用了关系模型结构,这也是商用数据库系统的数据模型,该模型结构是利用二维关系表来实现数据存储,利用索引访问和查询数据,这种模型结构是建立在严格的数学基础上的,结构简单灵活,独立性好,但在嵌入式环境下的内存开销和数据冗余较大,用户必须对其进行优化,增加了开发数据库系统的难度;有些嵌入式数据库则采用了网状模型结构,该模型通过指针来确定数据间的显式连接关系,它比关系模型中利用冗余数据和索引文件要节约大量的存储空间,具有一定的数据独立性和共享特性,运行效率较高,而且由于它避免了索引操作,比关系型数据库模式要节省存储空间,数据操作速度也更快。但是这种模型结构比较复杂,尤其当嵌入式系统规模增大时,其数据库的结构变得非常庞大,会影响到系统的实时性能。
ORACLE提供了以下几种索引:B-Tree、哈希(hash)、位图(bitmap)等索引类型,基于原始表的索引,基于函数的索引,域(Domain)索引。实际应用中主要是B-Tree索引和位图索引。位图索引主要用于决策支持系统或静态数据。位图索引可以是简单的(单列)也可以是连接的(多列),但在实践中绝大多数是简单的。位图索引最好用于低到中群集(cardinality)列,在这些列上多位图索引可以与AND或OR操作符结合使用。位图索引使用位图作为键值,对于表中的每一数据行位图包含了TRUE(1)、FALSE(0)、或NULL值。位图索引的位图存放在B-Tree结构的页节点中。B-Tree结构使查找位图非常方便和快速。另外,位图以一种压缩格式存放,因此占用的磁盘空间比B-Tree索引要小得多。
甲骨文公司推出的FastDB内存数据库是一个高效率的内存数据库系统,在磁盘上的数据库文件和使用该数据库的每一个应用程序占用的虚拟内存空间相映射,这样取消了数据文件和缓冲池中的数据传输。再将整个文件数据读入内存,并且使用了高性能的锁工具实现了只读模式线程间、单个更改模式线程和多个只读模式线程间的并发执行。通过位图实现对内存进行分配,最小单位块是分配量子(字节)。如此大大提高了数据引用的局部性(对象数据尽可能分配在连续的内存区域),最小化了修改页的数目和减少了事务提交时间。事务提交协议基于一个影子根页算法,对数据库执行原子更新操作,恢复效率很高,在存储数据结构上可以采用结构(和相似,只是中每个节点中顺序存储了多个值),对于大量相似重复性数据的查询性能相当高。fastdb事务提交是影子根页算法,有两个数组currentindex和shadowindex,当前数组和影子数组,里面存放的是对象的地址偏移。当对象被修改时,内存中的对象被拷贝,位图bitmap也被拷贝了一份,影子数组依然存放原对象的地址偏移,指向原位图的页面,而当前数组指向新的拷贝的地址偏移,新的位图页,所有的修改也在拷贝的地址中进行。当事务成功提交后,就把当前数组的内容复制到影子数组,这样它们就都指向新的偏移了,而原来指向的内存空间可以释放掉,而且修改页的内容被刷新到磁盘上。如果事务提交失败,需要回滚,就把影子数组的内容复制到当前数组。
发明内容
本发明所要解决的技术问题在于提供一种提升嵌入式数据库实时性的数据存储方法。该方法可以明显提升嵌入式实时数据库的实时性,满足嵌入式数据库应用的实时性要求。
为实现上述目的,本发明提供一种提升嵌入式数据库实时性的数据存储方法,其特征在于:数据库文件存储空间分为四部分,依次包含数据库头信息、对象索引、位图页和其它对象占用空间,其中,对象索引是以对象标识为下标的对象数组。
较优选的,所述对象索引是将对象的OID映射为对象的存储位置的数组,对象索引的值为该对象在所述数据库文件存储空间中的偏移量,所述偏移量将该对象的内存映像定位到数据库文件存储空间中。
本发明通过对象位图结合的对象存储技术,提高了数据库的存储效率。通过对象位图访问数据库对象的方式,可以在实现时使用数组,以提高元数据的访问速度。特别是在数据库容量相对较小的应用场景下,这种方法可以大大提升访问速度。
附图说明
下面结合附图和具体实施方式对本发明作进一步的详细说明。
图1为数据库空间布局示意图;
图2为记录对象之间逻辑关系示意图。
图3为表对象之间逻辑关系示意图。
图4为记录对象的存储映像示意图。
具体实施方式
本发明中定义的存储设计是指嵌入式实时数据库中数据库元数据的存储结构、方案等,发明中的存储设计区别于一般数据库存储设计,为了保证数据库的实时性,使用了存取速度优先的存储结构,在存取方法上,也设计了符合此种结构,且速度优先的存取方法。
本发明的目的是通过方案中的存储设计,使嵌入式数据库系统在嵌入式应用场景下,提高数据库系统的实时性,这种实时性包括两方面的内容,一是在嵌入式场景下的实时系统中应用数据库,通过设计针对存储结构的存取方法,保证实时系统针对应用的实时性;二是根据数据库存储结构,设计专门的事务调试策略,达到事务的实时性。
本发明适用于嵌入式实时数据库,在进行嵌入式实时数据库的存储设计时,把数据库的各种概念进行相应的对象设计,使数据库中存储的都是对象,比如表记录是对象,表描述符是对象,索引是对象,索引的结点也是对象,内存页是对象,诸如此类。数据库中每个对象有自己唯一的标示,称之为OID(ObjectIdentifier,也写作oid)。Index[oid]是oid所代表的对象在数据库空间中的实际存储位置。针对这些对象的特点进行分类,之后进行存储,存取时以对象标识oid为索引信息,通过对象数组进行访问,可以大大提高嵌入式数据库的实时性。
根据数据库中存储的对象的特点进行分类,将存储对象分为通用对象(dbVarying)、记录对象(dbRecord)、表对象(dbTable)、字段对象(dbField)、哈希表对象(dbHashTable)和哈希表结点对象(dbHashTableItem),这六种对象类型。可以理解,根据实际的需要,还可以划分为其他对象类型。同一页只存储同一类型的对象。同一类型的对象有固定大小的长度,不同类型的对象的长度可以不同。这样就把对象区分成多个(本发明实施例中为6个)具有固定长度的数据类型了。通过把需要建立位图索引的列设置为固定长度的数据类型,就可以提高查询的效率。因为使用固定长度的数据类型的情况下,要比可变长度的数据类型的情况下,位图索引的性能更加优越,有利于提高数据库的实时性。
上述存储设计所实现的物理存储结果,如图1所示,完整的数据库文件存储空间分为四部分,依次包含数据库头信息(dbHeader)、对象索引(objectindex)、位图页(bitmappage)和其它对象占用空间。在本发明的一个较佳实施例中,头信息始终存储在数据库文件首页中,其大小例如是4K。
对象索引用于将对象的OID映射为对象的存储位置的数组,相当于一个“指针”数组。对象索引的大小可由应用程序指定,但是位置在头信息之后,可以扩展到新位置。这是因为,随着分配的新对象越来越多,对象索引会不够用,需要进行扩展,系统将为对象索引分配新的空间,并将原内容复制。这样对象索引在数据库空间中的位置是不确定的。在图1中对象索引以对象数组1和对象数组2为例。内存映像由该对象在数据库空间中的偏移量offset来定位。对象数组的值为该对象在数据库空间中的偏移量,下标为oid。对象标识oid的取值如下表所示。
oid | 对象 | |
0 | dbInvalidId | 预定义 |
1 | metatable | 预定义 |
2 | 位图页0 | 预定义 |
...... | 预定义 | |
8192 | 位图页8191 | 预定义 |
...... | 用户定义对象 | 动态使用 |
位图页用于存放位图的数据库页对象。位图页用于管理以dbAllocationQuantum为分配单元的数据库空间使用情况。一个dbAllocationQuantum(16字节)映射为Bitmap中的一个比特,比特值为0表示空闲,1表示已分配。位图页本身需要占用空间,按页管理。如上表所示,以下标oid取值2时表示位图页0,3表示位图页1,以此类推。位图页的大小根据头信息和对象索引的大小而定,可以动态分配。位图页初始状态位于对象索引之后,但可以动态分配。在一实施例中,每页映射空间大小:4K*8*16=512K,64M空间需要128个位图页管理,即512K。在系统中只有一份位图页。如果要改变某个位图页的内容,不能在该页上做修改,需要分配新的一个位图页对象,将原来位图页的内容复制到新位图页上,然后在新位图页上做修改。
本发明的存储结构区别于一般的数据库存储结构,是以对象的形式进行存储,根据存储位置的索引信息进行数据内容的存取访问。因每个类型的对象有固定大小的长度,所以可以通过oid为下标的对象数组进行对象数据内容的访问,因此最大程度地提高了访问速度,以满足嵌入式数据库实时性的要求。众所周知,如果进一步在同一个查询中合并多个位图索引,可以使得数据库的查询性能得到显著的提高。这对于提高应用程序的查询性能具有很大的帮助。
参考图2和图3,记录对象之间和表对象之间,都是双向链表结构。进一步参考图4,同一页中存储了记录对象这种类型的对象。在记录对象的内存映像中,通过prev指针指向前驱结点,用next指针指向后继结点。利用这种双向链表方式有利于实现快速响应。
另外,本发明采用一种时间优先的事务调度策略,主要指由应用确定事务的优先级,较高优先级的事务有抢占较低优先级事务的权力,较低优先级的事务被抢占后根据优先级进行排序,同等优先级的事务以事务先后顺序进行排序。
事务调度算法的设计是以一个事务链表为基础,通过不断更新链表中元素的位置和信息,达到事务实时性的目标。当数据库系统中存在正在执行的事务,此时如果一个新的事务产生,调度程序会把新事务的优先级和正在执行事务的优先级进行比较,比较结果中优先级高的事务会被立即执行,优先级低的事务则根据事务优先级和事务先后顺序进行排序,相应更新事务链表中的元素位置,以达到实时性的要求。事务链表中的结点中信息有事务优先级、事务ID、事务属主、事务产生时间和具体事务内容。这样,在应用事务较多时形成一个事务队列,数据库系统根据队列先后顺序进行事务执行。应用可以通过数据库相应接口对特定事务在队列中的位置进行调整,以保证实时性高的事务被优先处理。
本发明针对对象位图结合的存储结构,采用时间优先事务调度策略,以在嵌入式实时应用场景下,尽可能地达到事务的实时性。这种设计可以满足嵌入式实时应用对嵌入数据库系统对实时性的要求,保证应用实时性高的事务可以优先被数据库系统处理。
本发明通过对象位图结合的对象存储技术,提高了数据库的存储效率。通过对象位图访问数据库对象的方式,可以在实现时使用数组,以提高元数据的访问速度。特别是在数据库容量相对较小的应用场景下,这种方法可以大大提升访问速度,而嵌入式数据库应用的数据量一般在10GB以内,完全适用此存储技术,从而达到提升嵌入式数据库实时性的要求。在一实施例中,利用本发明的存储技术,在无哈希索引的情况下,8M插入4个字节的记录32万条(理论值),实际达到317436条;在有哈希索引的情况下,8M插入4个字节的记录17.4万条(理论值),对象数组为35万,实际达到160853条。
以上对本发明所提供的提升嵌入式数据库实时性的数据存储方法进行了详细的说明。对本领域的技术人员而言,在不背离本发明实质精神的前提下对它所做的任何显而易见的改动,都将构成对本发明专利权的侵犯,将承担相应的法律责任。
Claims (5)
1.一种提升嵌入式数据库实时性的数据存储方法,其特征在于包括以下步骤:
(1)对数据库的概念进行相应的对象设计,使数据库中存储的都是对象;
(2)将所述对象的对象标识映射为存储位置的数组,对象索引的值为该对象在数据库文件存储空间中的偏移量,所述偏移量将该对象的内存映像定位到所述数据库文件存储空间中;
(3)对所述对象进行分类,在同一页只存储同一类型的对象,同一类型的对象有固定的长度;将需要建立位图索引的列设置为固定长度的数据类型;其中,记录对象之间和表对象之间是双向链表结构,在所述记录对象的内存映像中,通过prev指针指向前驱结点,用next指针指向后继结点;
(4)通过对象标识为下标的对象数组进行对象数据的访问;
(5)由应用确定事务的优先级,较高优先级的事务有抢占较低优先级事务的权力,较低优先级的事务被抢占后根据优先级进行排序,同等优先级的事务以事务先后顺序进行排序;
(6)根据所述优先级执行事务。
2.如权利要求1所述的提升嵌入式数据库实时性的数据存储方法,其特征在于所述步骤(2)中,
在对位图页的内容进行修改时,分配新的一个位图页对象,将原来位图页的内容复制到新位图页上,然后在新位图页上做修改。
3.如权利要求1所述的提升嵌入式数据库实时性的数据存储方法,其特征在于所述步骤(5)中,
如果有一个新事务产生,就把所述新事务的优先级和正在执行的事务的优先级进行比较,比较结果中优先级高的事务被立即执行,优先级低的事务则根据事务优先级和事务先后顺序进行排序。
4.如权利要求3所述的提升嵌入式数据库实时性的数据存储方法,其特征在于,
应用通过数据库接口对特定事务在队列中的位置进行调整。
5.如权利要求3或4所述的提升嵌入式数据库实时性的数据存储方法,其特征在于,
通过改变事务链表中元素的位置和信息进行事务调度,所述事务链表中的节点中信息有事务优先级、事务ID、事务属主、事务产生时间和具体事务内容。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110445187.2A CN102411634B (zh) | 2011-12-27 | 2011-12-27 | 一种提升嵌入式数据库实时性的数据存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110445187.2A CN102411634B (zh) | 2011-12-27 | 2011-12-27 | 一种提升嵌入式数据库实时性的数据存储方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102411634A CN102411634A (zh) | 2012-04-11 |
CN102411634B true CN102411634B (zh) | 2016-01-13 |
Family
ID=45913705
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110445187.2A Active CN102411634B (zh) | 2011-12-27 | 2011-12-27 | 一种提升嵌入式数据库实时性的数据存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102411634B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9043334B2 (en) | 2012-12-26 | 2015-05-26 | Industrial Technology Research Institute | Method and system for accessing files on a storage system |
CN105373566B (zh) * | 2014-08-30 | 2018-01-23 | 华为技术有限公司 | 在线重建索引方法及装置 |
CN108614734B (zh) * | 2016-12-13 | 2022-08-12 | 迈普通信技术股份有限公司 | 安全参数索引管理方法及装置 |
US10671586B2 (en) * | 2017-07-25 | 2020-06-02 | Sap Se | Optimal sort key compression and index rebuilding |
CN108052290A (zh) | 2017-12-13 | 2018-05-18 | 北京百度网讯科技有限公司 | 用于存储数据的方法和装置 |
CN110147372B (zh) * | 2019-05-21 | 2022-12-23 | 电子科技大学 | 一种面向htap的分布式数据库智能混合存储方法 |
CN110209701A (zh) * | 2019-06-10 | 2019-09-06 | 天津神舟通用数据技术有限公司 | 一种基于内存多级缓存的数据快速分页查询访问的方法 |
CN110287190A (zh) * | 2019-06-25 | 2019-09-27 | 四川深度在线广告传媒有限公司 | 一种大数据分析自定义编码储存结构及编码、解码方法 |
CN112650887B (zh) * | 2020-12-22 | 2022-02-18 | 广州锦行网络科技有限公司 | 一种图数据库时间属性的快速查询方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101901261A (zh) * | 2010-07-23 | 2010-12-01 | 南京国电南自轨道交通工程有限公司 | 一种使用类聚簇的实时数据库存储方法 |
CN102184140A (zh) * | 2011-04-01 | 2011-09-14 | 航天恒星科技有限公司 | 一种面向实时数据库的表文件空间分配方法 |
-
2011
- 2011-12-27 CN CN201110445187.2A patent/CN102411634B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101901261A (zh) * | 2010-07-23 | 2010-12-01 | 南京国电南自轨道交通工程有限公司 | 一种使用类聚簇的实时数据库存储方法 |
CN102184140A (zh) * | 2011-04-01 | 2011-09-14 | 航天恒星科技有限公司 | 一种面向实时数据库的表文件空间分配方法 |
Non-Patent Citations (1)
Title |
---|
《基于FastDB的内存数据库实现机制研究》;曹玉林;《四川大学学报》;20110819;图2,2.2实现共享内存数据库的步骤,3FastDB中的主要数据结构 * |
Also Published As
Publication number | Publication date |
---|---|
CN102411634A (zh) | 2012-04-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102411634B (zh) | 一种提升嵌入式数据库实时性的数据存储方法 | |
US10338853B2 (en) | Media aware distributed data layout | |
US8768977B2 (en) | Data management using writeable snapshots in multi-versioned distributed B-trees | |
US10437721B2 (en) | Efficient garbage collection for a log-structured data store | |
US10534768B2 (en) | Optimized log storage for asynchronous log updates | |
US7673099B1 (en) | Affinity caching | |
US7640262B1 (en) | Positional allocation | |
CN107423422B (zh) | 基于网格的空间数据分布式存储及检索方法和系统 | |
US8271545B2 (en) | Database partitioning by virtual partitions | |
US7930559B1 (en) | Decoupled data stream and access structures | |
US7720892B1 (en) | Bulk updates and tape synchronization | |
CN103106286B (zh) | 元数据的管理方法和装置 | |
CN103544045A (zh) | 一种基于hdfs的虚拟机镜像存储系统及其构建方法 | |
CN102084331A (zh) | 在多处理器/多线程环境下协调存储请求的装置、系统和方法 | |
CN102982151B (zh) | 多个物理文件合并为一个逻辑文件的方法 | |
CN105677761A (zh) | 一种数据切分的方法及系统 | |
US11327999B2 (en) | Reorganization of partition by growth space with LOB columns | |
CN102722450B (zh) | 一种基于位置敏感哈希的删冗块设备存储方法 | |
Boehm et al. | EasyWinWin: a groupware-supported methodology for requirements negotiation | |
CN107133334A (zh) | 基于高带宽存储系统的数据同步方法 | |
WO2021189308A1 (en) | Delete operation in object storage system using enhanced meta structure | |
WO2021189311A1 (en) | Read operation in object storage system using enhanced meta structure | |
WO2021189306A1 (en) | Write operation in object storage system using enhanced meta structure | |
CN107122264A (zh) | 海量数据容灾备份方法 | |
CN107066624A (zh) | 数据离线存储方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |