CN102411632B - 基于链表的内存数据库页式存储方法 - Google Patents
基于链表的内存数据库页式存储方法 Download PDFInfo
- Publication number
- CN102411632B CN102411632B CN201110445101.6A CN201110445101A CN102411632B CN 102411632 B CN102411632 B CN 102411632B CN 201110445101 A CN201110445101 A CN 201110445101A CN 102411632 B CN102411632 B CN 102411632B
- Authority
- CN
- China
- Prior art keywords
- page
- database
- chained list
- storage method
- type 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.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种基于链表的内存数据库页式存储方法。该方法中,内存数据库分为用于存储数据库运行所需信息的系统数据库,以及用于存储用户创建表的用户数据库,其中,系统数据库包括数据库元信息区、基本逻辑块、事务相关信息区、线程信息区和页;系统数据库中的信息存储在由基本逻辑块和系统数据库中页结构构成的链表结构中;用户数据库包括数据库元信息区和页,用户数据库中的元组存放在由基本逻辑块的链表中新建的逻辑块和用户数据库中的页构成的链表结构中。因为本发明有利于数据库实现进一步的功能扩展,而且利用链表结构进行存储,大大缩减了响应时间,提高了处理速度。
Description
技术领域
本发明涉及一种数据库数据存储方法,尤其涉及一种基于链表的内存数据库页式存储方法,属于数据库存储技术领域。
背景技术
传统的数据库管理系统把所有数据都放在磁盘上进行管理,称为磁盘数据库(DRDB:Disk-Resident Database)。近年来,内存容量不断提高,价格不断下跌,操作系统可以支持的地址空间不断加大(计算机进入了64位时代),同时对数据库系统实时响应能力要求日益提高,充分利用内存技术提升数据库性能成为一个热点。
在数据库技术中,目前主要有两种方法来使用大量的内存。一种是在传统的数据库中,增大缓冲池,将一个事务所涉及的数据都放在缓冲池中,组织成相应的数据结构来进行查询和更新处理,也就是常说的共享内存技术,这种方法优化的主要目标是最小化磁盘访问。另一种就是内存数据库(MMDB:Main Memory Database,也叫主存数据库)技术,重新设计一种数据库管理系统,对查询处理、并发控制与恢复的算法和数据结构进行重新设计,以更有效地使用CPU周期和内存,这种技术近乎把整个数据库放进内存中,因而会产生一些根本性的变化。
内存数据库数据存储的组织和管理一个MMDB的逻辑整体主要由两个部分构成,即内存版本与外存版本。主存储器是易失内存,它存放MMDB的“工作版本”。它在逻辑上被划分为若干分区,一个分区用来存放一个关系的数据。每个分区又物理地由若干相互链接的块组成。一块是一个固定长度的连续区域,它是内外存I/O的单位,也是内存分配、回收以及对MMDB进行恢复的单位。索引与数据记录分离存放。NV-RAM(NO Vola tile RAM)广泛用于嵌入式系统,并可与Flash-RAM配合使用,充当Flash-RAM写缓冲区。主存数据与NV-RAM数据一起统称为MMDB的“内存版本”。磁盘存储器用来存放未在内存的那一部分数据库数据,同时也用作数据库恢复的备份,称之为“外存版本”。为便于实现内外存间的数据交换,将磁盘数据在逻辑上划分为与内存块同样长度的定长块,建立相同类型的索引。
针对内存数据库的上述特点,重新设计数据库的体系结构,使其布局紧凑合理,使其适应内存运行特点,便于进一步功能扩展并提高处理速度。
发明内容
本发明要解决的技术问题在于针对内存数据库提供一种便于扩展并且处理快速的数据存储方法。
为实现上述目的,本发明提供一种基于链表的内存数据库页式存储方法,包括如下步骤:
将内存数据库分为用于存储数据库运行所需信息的系统数据库,以及用于存储用户创建表的用户数据库,
其中,所述系统数据库中的信息存储在由基本逻辑块和系统数据库中页结构构成的链表结构中;
所述用户数据库中的元组存放在由逻辑块和用户数据库中的页构成的链表结构中;所述逻辑块作为节点存储在所述系统数据库中相应的链表的页中,包括逻辑块ID、分配节点所占字节数、链表中最后一个页指针、链表中第一个页的指针、逻辑块名。
因为本发明重新设计了数据库的体系结构,使其布局紧凑合理,使其适应内存运行特点,便于进一步功能扩展。因为本发明数据依据链表结构进行存储,存储时,统一按照定长数据处理,运行时只需要通过指针进行访问,大大缩减了响应时间,提高处理速度。
附图说明
下面结合附图和具体实施方式对本发明作进一步的详细说明。
图1是本发明的系统数据库构成示意图;
图2是本发明的用户数据库构成示意图;
图3是逻辑块结构示意图;
图4是页结构示意图;
图5是逻辑块-页链表结构示意图。
具体实施方式
本发明对内存数据库进行重构,使其分为两块:系统数据库和用户数据库。把数据库中的数据字典等信息存储在由逻辑块和页构成的链表中。对于数据库运行时的锁、事务、日志、用户信息、用户创建表的信息、用户创建表的属性信息、表的索引信息等都有相应的基本逻辑块与其对应。这种设计,结构清晰,紧凑,便于进一步功能扩展。在存储数据时,把元组作为定长进行存储,对于变长数据单独创建一个链表进行存储。对于大数据,把几个物理相邻的页合并,进行存储。对于索引,只存储指向元组的指针,这样减少了索引的大小,提高查询效率。
基于链表的内存数据库页式存储结构设计方法,内存数据库系统由两部分组成:系统数据库和用户数据库。系统数据库结构包括数据库元信息区、基本逻辑块(chunk)、事务相关信息区、线程信息区和系统数据库页(详见附图1),主要用于存储数据字典等系统运行时相关信息。数据库元信息区,是用Database Meta Data获取数据库表的信息。基本逻辑块有多个(本实施例中是Chunk0~Chunk19,共20个),分别对应锁、事务、日志、用户信息、用户创建表的信息、用户创建表的属性信息、表的索引信息等各种类型的信息中的一种类型。所有信息都作为表来进行处理,存储在由基本逻辑块和系统数据库中页结构构成的链表结构中。
事务相关信息区是由MaxProcs()*sizeof(Transaction)表示事务的最大进程数。类似的,线程相关信息区是由MaxProcs()*sizeof(ThreadInfo)表示线程的最大进程数。多个系统数据页,分别存储数据库系统信息的储存位置,数据库产生的详细信息,除自己之外数据页列表及使用信息以及启动及停止时数据库全面检查及维护变更信息等。
用户数据库主要由数据库元信息区和用户数据库中页构成(详见附图2),存储用户创建表的元组。用户数据库页存储数据的储存位置,由页头和页体构成。页头维护相互之间列表的连接信息。用户数据库中,存储用户创建的元组,同一个表中的元组存放在相同的链表中,存放在由基本逻辑块的链表中新建的逻辑块与用户数据库中的页构成的链表结构中。换言之,将用户创建的元组所在链表的逻辑块,作为节点存储在系统数据库中相应的链表中。
具体而言,如图5所示,利用逻辑块结构中包含的指针,即链表中最后一个页指针和链表中第一个页的指针,以及页结点中包含的下一页指针,建立了逻辑块-页链表。其中,图5中最上面一行的是系统数据库的链表,其中的页存储的节点为逻辑块。在此将系统数据库中的特定逻辑块称为基本逻辑块,以区别于存放在系统数据库链表的页节点中的逻辑块。基本逻辑块是指图1所示的系统数据库结构中的Chunk0~Chunk9,其具有固定位置和固定的逻辑块名称。一个基本逻辑块对应一种类型的对象。基本逻辑块有两个指针分别指向第一个页和最后一个页,除了最后一个页的指针均指向下一个页,最后一个页的指针为空。可见,系统数据库的链表包括基本逻辑块和页节点。除非特别说明,本文所称逻辑块既可以是基本逻辑块,也可以是存储在系统数据库中链表的页节点中的逻辑块。
在图5中位于中间和最下面的是用户数据库中的页,用于存储用户创建的元组。存储在系统数据库中链表的页节点中的逻辑块,指向用户数据库的链表中的第一个页和最后一个页。
逻辑块的结构中包括块ID、页中分配节点所占字节数、链表中最后一个页指针、链表中第一个页的指针、逻辑块名和信号变量构成(详见附图3)。页的大小为4K的整数倍,页头包括:使用标识位、空闲空间标识位、指向下一页指针和合并后下一页指针(详见附图4)。
页中存储的数据类型分为三类:定长类型数据,变长类型数据和大数据。在同一个页中存储同一类型的数据。对于用户创建表进行存储时,当有变长类型的属性时,建两个链表,一个存储变长数据,一个存储定长属性值和指向变长属性值的指针,通过这种方式,使其存储的数据都作为定长处理,提高查询效率。对于大数据,需要合并多个相邻的页来进行存储,通过合并后下一页指针来查找物理上相邻的下一个页。
在数据库系统的索引结构中只存储指向元组的指针,这样减少了索引的大小,避免了处理在索引中的长字段、可变长字段以及压缩技术,当更新索引操作时,移动指针将比移动属性值更廉价。由于单个元组指针提供访问这个元组中的任何字段,所以不需要特殊多属性索引。
众所周知,通过将对象串连在一起,从而构成链表结构,这样,如果要修改、删除、查找某个对象,都可以先到链表中去查找,而不必实际访问物理介质。本发明就采用了如图5所示的逻辑块-页链表结构,从而提高内存数据库的性能。
基于上述的结构,数据库层次清晰,基本逻辑块结构紧凑,数据全驻内存,便于进一步功能扩展。因为本发明数据依据链表结构进行存储,存储时,统一按照定长数据处理,运行时只需要通过指针进行访问,大大缩减了响应时间,提高处理速度。
在本专利中,对数据库进行重新设计。系统中,所有的信息都作为表来进行处理,并以逻辑块和页结构构成的链表结构来存储表;索引中,存储指向元组的指针,减少了索引的大小,避免了处理在索引中的长字段、可变长字段以及压缩技术,当更新索引操作时,移动指针将比移动属性值更廉价。由于单个元组指针提供访问这个元组中的任何字段,不需要多属性索引。本专利从根本上抛弃了磁盘数据管理的许多传统方式,基于全部数据都在内存中管理这一特性,对数据库进行了新的体系结构设计,从而使数据处理速度一般比传统数据库的数据处理速度至少快10倍以上,理想情况可以达到1000倍。
以上对本发明所提供的基于链表的内存数据库页式存储方法进行了详细的说明。对本领域的技术人员而言,在不背离本发明实质精神的前提下对它所做的任何显而易见的改动,都将构成对本发明专利权的侵犯,将承担相应的法律责任。
Claims (7)
1.一种基于链表的内存数据库页式存储方法,其特征在于:
将内存数据库分为用于存储数据库运行所需信息的系统数据库,以及用于存储用户创建表的用户数据库,
其中,所述系统数据库中的信息存储在由基本逻辑块和系统数据库中页结构构成的链表结构中;
所述用户数据库中的元组存放在由逻辑块和用户数据库中的页构成的链表结构中;所述逻辑块作为节点存储在所述系统数据库中相应的链表的页中,包括逻辑块ID、分配节点所占字节数、链表中最后一个页指针、链表中第一个页的指针、逻辑块名。
2.如权利要求1所述的基于链表的内存数据库页式存储方法,其特征在于:
所述系统数据库包括数据库元信息区、基本逻辑块、事务相关信息区、线程信息区和页;
所述用户数据库包括数据库元信息区和页。
3.如权利要求2所述的基于链表的内存数据库页式存储方法,其特征在于:
所述基本逻辑块和所述逻辑块均有两个指针,分别指向链表的第一个页和最后一个页。
4.如权利要求1或2所述的基于链表的内存数据库页式存储方法,其特征在于:
所述页的页头包括使用标识位、空闲空间标识位、指向下一页指针和合并后下一页指针。
5.如权利要求1所述的基于链表的内存数据库页式存储方法,其特征在于:
一个基本逻辑块对应一种类型的对象。
6.如权利要求1所述的基于链表的内存数据库页式存储方法,其特征在于:
所述基本逻辑块固定位于系统数据库的数据库元信息区之后。
7.如权利要求1所述的基于链表的内存数据库页式存储方法,其特征在于:
存储用户创建表时,当有变长类型数据时建立两个链表:一个链表存储变长数据,另一个链表存储定长属性值和指向变长属性值的指针。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110445101.6A CN102411632B (zh) | 2011-12-27 | 2011-12-27 | 基于链表的内存数据库页式存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110445101.6A CN102411632B (zh) | 2011-12-27 | 2011-12-27 | 基于链表的内存数据库页式存储方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102411632A CN102411632A (zh) | 2012-04-11 |
CN102411632B true CN102411632B (zh) | 2014-08-20 |
Family
ID=45913703
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110445101.6A Active CN102411632B (zh) | 2011-12-27 | 2011-12-27 | 基于链表的内存数据库页式存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102411632B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104636372B (zh) * | 2013-11-11 | 2019-04-26 | 中兴通讯股份有限公司 | 基于表格实现大数据量处理的方法及装置 |
CN105260475B (zh) * | 2015-10-30 | 2019-08-16 | 努比亚技术有限公司 | 一种数据查找方法、数据存储方法及相应装置 |
CN108121813B (zh) * | 2017-12-27 | 2020-09-18 | 东软集团股份有限公司 | 数据管理方法、装置、系统、存储介质及电子设备 |
CN109446022B (zh) * | 2018-10-12 | 2022-08-12 | 厦门市美亚柏科信息股份有限公司 | 一种数据库溢出页异常的检测方法、装置及存储介质 |
CN111400314B (zh) * | 2020-03-02 | 2023-10-27 | 支付宝(杭州)信息技术有限公司 | 利用向量图索引从数据库中检索节点向量的方法及装置 |
CN111309985B (zh) * | 2020-03-10 | 2023-08-25 | 支付宝(杭州)信息技术有限公司 | 基于PostgreSQL数据库的高维向量存储方法和装置 |
CN112486996B (zh) * | 2020-12-14 | 2022-08-05 | 上海交通大学 | 面向对象的内存数据存储系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101055589A (zh) * | 2007-05-30 | 2007-10-17 | 北京航空航天大学 | 嵌入式数据库的存储管理方法 |
CN101315628A (zh) * | 2007-06-01 | 2008-12-03 | 华为技术有限公司 | 内存数据库系统及实现内存数据库的方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7305421B2 (en) * | 2001-07-16 | 2007-12-04 | Sap Ag | Parallelized redo-only logging and recovery for highly available main memory database systems |
-
2011
- 2011-12-27 CN CN201110445101.6A patent/CN102411632B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101055589A (zh) * | 2007-05-30 | 2007-10-17 | 北京航空航天大学 | 嵌入式数据库的存储管理方法 |
CN101315628A (zh) * | 2007-06-01 | 2008-12-03 | 华为技术有限公司 | 内存数据库系统及实现内存数据库的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102411632A (zh) | 2012-04-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102411632B (zh) | 基于链表的内存数据库页式存储方法 | |
CN107423422B (zh) | 基于网格的空间数据分布式存储及检索方法和系统 | |
CN104040481B (zh) | 用于融合、存储和检索增量式备份数据的方法和系统 | |
CN102129458B (zh) | 关系型数据库的存储方法及装置 | |
CN102646130B (zh) | 一种海量历史数据的存储及索引方法 | |
TWI472935B (zh) | 漸進式備份之基于片段的高延展的去複本系統與方法 | |
US20160328429A1 (en) | Mutations in a column store | |
CN101692252B (zh) | 文件空闲块的分配和回收方法 | |
JP2017518584A (ja) | フラッシュ最適化データ・レイアウトのための方法、フラッシュ最適化記憶のための装置、およびコンピュータ・プログラム | |
CN100383792C (zh) | 缓存数据库数据组织方法 | |
CN110162528A (zh) | 海量大数据检索方法及系统 | |
CN103488684A (zh) | 基于缓存数据多线程处理的电力可靠性指标快速计算方法 | |
CN105117417A (zh) | 一种读优化的内存数据库Trie树索引方法 | |
CN110109910A (zh) | 数据处理方法及系统、电子设备和计算机可读存储介质 | |
CN102651008A (zh) | 在关系数据库中组织数据记录的方法和设备 | |
CN101916261A (zh) | 一种分布式并行数据库系统的数据分区方法 | |
CN101777016A (zh) | 一种连续数据保护系统的快照存储和数据恢复方法 | |
CN102541985A (zh) | 一种分布式文件系统中客户端目录缓存的组织方法 | |
CN101676906A (zh) | 一种利用位图对内存数据库空间进行管理的方法 | |
CN104021145A (zh) | 一种混合业务并发访问的方法和装置 | |
WO2011064742A1 (en) | Super-records | |
CN106557272A (zh) | 一种高效的传感器历史数据归档方法 | |
CN100424699C (zh) | 一种属性可扩展的对象文件系统 | |
CN110309233A (zh) | 数据存储的方法、装置、服务器和存储介质 | |
CN101777017A (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 |