CN1286043C - 一种在数据库里快速定位数据页中记录的方法 - Google Patents
一种在数据库里快速定位数据页中记录的方法 Download PDFInfo
- Publication number
- CN1286043C CN1286043C CNB2003101242014A CN200310124201A CN1286043C CN 1286043 C CN1286043 C CN 1286043C CN B2003101242014 A CNB2003101242014 A CN B2003101242014A CN 200310124201 A CN200310124201 A CN 200310124201A CN 1286043 C CN1286043 C CN 1286043C
- Authority
- CN
- China
- Prior art keywords
- record
- slot
- dir
- page
- leaf
- 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.)
- Expired - Lifetime
Links
- 238000000034 method Methods 0.000 title claims abstract description 35
- 238000012217 deletion Methods 0.000 claims description 9
- 230000037430 deletion Effects 0.000 claims description 9
- 230000008878 coupling Effects 0.000 claims description 4
- 238000010168 coupling process Methods 0.000 claims description 4
- 238000005859 coupling reaction Methods 0.000 claims description 4
- 239000003550 marker Substances 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 230000001174 ascending effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24547—Optimisations to support specific applications; Extensibility of optimisers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
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)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种在数据库里快速定位数据页中记录的方法,包括:在数据页的末端设置一个目录结构,该目录结构由一组记录偏移构成,记录偏移是某条记录在页里的位置偏移;该目录结构中的每个目录称之为dir_slot,每个dir_slot存放一个记录位置的偏移;采用快速二分法定位算法在dir_slot中查找相关记录,在定位到某个dir_slot后,根据该dir_slot中存放的记录偏移,顺序查找这相关的这一组记录,准确地定位到要找的那条记录。本发明极大地提高了在一个页面中定位一条记录的速度,节省了大量的顺序查找的开销,大大地节省了查询比较的次数,同时也非常有效地管理了页面记录。
Description
技术领域
本发明涉及一种数据库技术中对数据页里记录进行管理的方法,特别涉及一种在数据库里快速定位数据页中记录的方法。
背景技术
数据库系统是对大量数据进行管理的一种非常有效的软件系统。数据库中最小的管理单位是记录,每条记录记载一组相关信息。数据页是存放记录的物理单元,在一个页面可以存放多条记录。数据页中的每个记录都有一个指针,该指针指向下一条记录,整个页面里的记录都链成一个线性记录链,当搜索记录时,顺着该条线性记录链,就可以定位到具体的某条记录。这种方法的缺陷在于:页面搜索效率很低,导致数据库查询效率较低。
发明内容
本发明的目的在于提出一种在数据库里快速定位数据页中记录的方法,能够提高在数据库里定位数据记录的速度。
数据页中的记录都是顺序存放的,本发明采用的方案如下:在数据页的末端设置一个目录结构,该目录结构由一组记录偏移构成,记录偏移是某条记录在页里的位置偏移。该目录结构中的每个目录称之为dir_slot,每个dir_s1ot存放一个记录位置的偏移,根据该位置偏移,可以立即定位到一条记录。但并不是每条记录的位置偏移都记录在dir_slot中,在数据页中的这个线性记录链中,每隔一定的记录数(该记录数在dir_slot的记录最大限值和最小限值之间),取一条记录的偏移存放在dir_slot中。这样,每个页面就有了一个目录结构,在进行查询时,并不对具体记录进行查找,而是采用快速的定位算法在dir_slot中查找相关记录,在定位到某个dir_slot后,根据该dir_slot中存放的记录偏移,顺序查找这相关的这一组记录,通过这种方法就能够准确地定位到要找的那条记录。
具体地讲,本发明公开了一种在数据库里快速定位数据页中记录的方法,包括如下步骤:
(1)在数据页的末端设置一个目录结构,该目录结构由一组记录偏移构成,记录偏移是某条记录在页里的位置偏移;该目录结构中的每个目录称之为dir_slot,每个dir_slot存放一个记录位置的偏移;
(2)采用定位算法在dir_slot中查找相关记录,在定位到某个dir_slot后,根据该dir_slot中存放的记录偏移,顺序查找这相关的这一组记录,准确地定位到要找的那条记录。
所述在数据库里快速定位数据页中记录的方法,还包括待查记录放在字段结构体里,数据页中的记录将与字段结构体进行比较。
所述在数据库里快速定位数据页中记录的方法,首先把代表dir_slot序号的两个变量low,up赋初值,low赋值为0,up赋值为页上的dir_slot的总数,然后进行定位算法查询,判断该记录属于哪个dir_slot。
所述定位算法为二分法。
所述二分法查询是连续取中间值与字段结构体比较,直到up-low的值不大于1为止。
找到记录后,从序号为low的dir_slot中,顺序取记录和字段结构体进行比较,直到该记录的下一条记录为序号为up的dir_slot上的首记录up_rec;如果在这个过程中找到记录,则在该页完成查找;如果找不到,则转到下一页进行同样的匹配。
所述的在数据库里快速定位数据页中记录的方法,在数据库中的一个数据页面上插入一条记录而导致dir_slot上记录数满时,则把当前的dir_slot分裂成两个,以增加dir_slot。
该记录插入链表后,该记录所在的dir_slot上的记录总数超过最大限值,则把该dir_slot后的dir_slot全部后移一位,这样就增加了一个dir_slot,并把该记录所在的dir_slot上的所有记录一分为二,把两部分记录分别归属到这两个dir_slot上。
所述的在数据库里快速定位数据页中记录的方法,在删除一条记录时,把该记录从链表上取下来,并置删除标志。
首先获取该dir_slot后面的一个dir_slot,并判断后面的dir_slot上的记录数,如果记录数大于最小限值,就从后一个dir_slot上取一条记录,加入当前的dir_slot中去;如果记录数小于等于最小限值,就把两个dir_slot合并,并删除当前的dir_slot。
本发明有益效果在于,相比于现有技术,本发明在一个页面中定位一条记录的速度得到了极大的提高。查询某一条记录时,不需要按记录链顺序查找比较,而是在目录机构中对dir_slot进行快速定位查找,这样,节省了大量的顺序查找的开销,在定位到具体的dir_slot后,最大的查询比较次数就是dir_slot的最大限值记录数。采用该种方法大大地节省了查询比较的次数。由于把dir_slot放在页的末端,不用在页中预留空间,同时也非常有效地管理了页面记录。由于dir_slot只是存放一条记录的偏移,因此占用的空间极少。
附图说明
图1是本发明的数据页的结构说明;
图2是本发明的dir_slot的增加图;
图3是本发明的dir_slot的删除图;
图4是本发明在数据页中定位记录的流程图。
具体实施方式
图1为数据页的整体结构图,它描述了一个数据页的完整的结构。在该图中,前26个字节描述该页中记录的属性,26——36字节描述该页的属性,36——56是段指针,dir_slot从页的末尾向上扩展,采用这种方案巧妙地避免了我们为dir_slot预留空间。这样,在增减记录时,不必考虑当前存储了多少记录,使用了多少dir_slot。
图2是dir_slot的增加图,描述了在数据库中的一个数据页面上插入记录时,如果该记录所在的dir_slot上记录数已经达到最大限值后,dir_slot如何把当前的dir_slot分裂成两个,从而达到增加dir_slot的目的。每页中的记录是一个记录链表,在插入记录时,把该记录插入到该链表的相关位置,一般按升序排列。如图所示,插入链表后(步骤201),首先获取该记录所在的dir_slot上的记录数(slot号为slot_no)(步骤202),然后判断该记录所在的dir_slot上的记录数是否超最大限值(步骤203),如果不超过最大限值,直接记录插入日志并结束(步骤212);如果超过最大限值,获取该dir_slot在该页上的地址slot(步骤204),获取该dir_slot上的记录数n_owned(步骤205),获取前一个dir_slot的地址prev_slot(步骤206),根据prev_slot值得到该prev_slot上的记录指针(步骤207),取得该记录下面的第prev_slot/2个记录的指针recptr4(步骤208),把大于等于slot_no的dir_slot后移一位(步骤209),这样就增加了一个dir_slot,并把该记录所在的dir_slot上的所有记录一分为二,即设置slot_no上的dir_slot的记录数为n_owned/2,并把dir_slot上的记录偏移记为recptr4(步骤210),设置slot_no+1上的dir_slot的记录数为n_owned-n_owned/2(步骤211),这样就可以把两部分记录分别归属到这两个dir_slot上,然后记录插入日志并结束(步骤212)。
图3是dir_slot的删除图,描述了当删除记录时,在dir_slot上记录数小于最小限值时,如何合并两个dir_slot。在数据库中的一个数据页面上删除一条记录时,系统是如何对dir_slot进行调整的。每页中的记录是一个记录链表,在删除一条记录时,把该记录从链表上取下来,并置删除标志(步骤301)。然后取该记录所在的dir_slot上的记录总数(步骤302),如果记录总数小于等于最小限值(步骤303),那么就进行对dir_slot的调整工作。首先获取该dir_slot后面的一个dir_slot(步骤304-306),并判断后面的dir_slot上的记录数(步骤307),如果记录数大于最小限值,就从后一个dir_slot上取一条记录,加入当前的dir_slot中去,具体地讲,取当前dir_slot的记录指针old_rec(步骤310),取该记录的下一条记录指针为new_rec(步骤311),设置当前dir_slot的记录指针为new_rec(步骤312)设置当前dir_slot和后一个dir_slot的记录为新值(步骤313),然后记录删除日志并结束(步骤314)。如果记录数小于等于最小限值,把该dir_slot后的所有dir_slot前移一位(步骤308),合并该dir_slot和后面的dir_slot(步骤309),记录删除日志并结束(步骤314)。这样就对dir_slot进行了调整。
图4是在数据页中定位记录的流程图,它描述了如何在一个页面中定位一条记录,在数据页上查询一条记录的流程图。待查记录的部分域的值放在字段结构体turple里(步骤401),(所谓字段结构体turple是待查记录的部分字段组成的一个结构体。要在数据库中查询一条记录,必须知道该记录的部分内容,例如一个人事档案数据库,通过姓名字段可以进行查询,姓名字段就构成了一个turple),数据页中的记录将与字段结构体进行比较。首先把代表dir_slot序号的两个变量low,up赋初值,low赋值为0,up赋值为页上的dir_slot的总数(步骤402),然后进行二分法查询,判断该记录属于哪个dir_slot。二分法查询的方法是不断地取中间值与字段结构体比较,直到up-low的值不大于1为止。具体地讲,所述二分法是取页上的dir_slot的中间值的记录与turple比较。首先设置mid=(low+up)/2,据此获取序号为mid的dir_slot上的记录mid_rec,将mid_rec与字段结构体进行比较,如果mid_rec大于turple,则令up=mid,如果mid_rec小于turple,则令low=mid,重新比较(步骤403、404、405、406、407、409)。找到记录后,从序号为low的dir_slot中顺序取记录和字段结构体进行比较,直到该记录的下一条记录为up_rec(up_rec是序号为up的dir_slot上的首记录)(步骤410、411、412、413、414、415、417)。如果在这个过程中找到记录,则在该页完成查找(步骤408和步骤416)。如果找不到,则转到下一页进行同样的匹配(步骤418)。从这个过程中,通过dir_slot这种结构,在页面上能够非常迅速地查找到相关的记录。
例如,假设一个页面存放了300条记录,如果顺序查找,需要进行300次匹配。而如果采用本发明中所描述的方法,大约需要40个左右的dir_slot存放部分记录的偏移,采用二分法定位,最多需要5次匹配定位出具体的dir_slot,在dir_slot中最多需要定位8次,最坏情况下总共需要定位13次,在页面的查询速度提高了23倍。由于把dir_slot放在页的末端,不用在页中预留空间,同时也非常有效地管理了页面记录。由于dir_slot只是存放一条记录的偏移,因此占用的空间极少,按每个偏移4个字节算起,300条记录共需约160个字节左右的存储空间。
Claims (9)
1.一种在数据库里快速定位数据页中记录的方法,其特征在于,包括如下步骤:
(1)在数据页的末端设置一个目录结构,该目录结构由一组记录偏移构成,记录偏移是某条记录在页里的位置偏移;该目录结构中的每个目录称之为dir_slot,每个dir_slot存放一个记录位置的偏移;
(2)采用二分法定位算法在dir_slot中查寻相关记录,在定位到某个dir_slot后,根据该dir_slot中存放的记录偏移,顺序查找这相关的这一组记录,准确地定位到要找的那条记录。
2.如权利要求1所述的在数据库里快速定位数据页中记录的方法,其特征在于,还包括如下步骤:待查记录放在字段结构体里,数据页中的记录将与字段结构体进行比较。
3.如权利要求2所述的在数据库里快速定位数据页中记录的方法,其特征在于,首先把代表dir_slot序号的两个变量low,up赋初值,low赋值为0,up初值为该数据页上的dir_slot的总数,然后进行定位算法查询,判断该记录属于哪个dir_slot。
4.如权利要求1所述的在数据库里快速定位数据页中记录的方法,其特征在于,所述二分法是连续取中间值与字段结构体比较,直到up-low的值小于等于1为止。
5.如权利要求3或4所述的在数据库里快速定位数据页中记录的方法,其特征在于,找到记录后,从序号为low的dir_slot中,顺序取记录和字段结构体进行比较,直到该记录的下一条记录为序号为up的dir_slot上的首记录up_rec;如果在这个过程中找到记录,则在该页完成查找;如果找不到,则转到下一页进行同样的匹配。
6.如权利要求1所述的在数据库里快速定位数据页中记录的方法,其特征在于,在数据库中的一个数据页面上插入一条记录而导致dir_slot上记录数满时,则把当前的dir_slot分裂成两个,以增加dir_slot。
7.如权利要求6所述的在数据库里快速定位数据页中记录的方法,其特征在于,该记录插入链表后,该记录所在的dir_slot上的记录总数超过最大限值,则把该dir_slot后的dir_slot全部后移一位,这样就增加了一个dir_slot,并把该记录所在的dir_slot上的所有记录一分为二,把两部分记录分别归属到这两个dir_slot上。
8.如权利要求1所述的在数据库里快速定位数据页中记录的方法,其特征在于,在删除一条记录时,把该记录从链表上取下来,并置删除标志。
9.如权利要求8所述的在数据库里快速定位数据页中记录的方法,其特征在于,首先获取该dir_slot后面的一个dir_slot,并判断后面的dir_slot上的记录数,如果记录数大于最小限值,就从后一个dir_slot上取一条记录,加入当前的dir_slot中去;如果记录数小于等于最小限值,就把两个dir_slot合并,并删除当前的dir_slot。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2003101242014A CN1286043C (zh) | 2003-12-31 | 2003-12-31 | 一种在数据库里快速定位数据页中记录的方法 |
US10/584,010 US20070124279A1 (en) | 2003-12-31 | 2004-06-22 | Method for quickly retrieving a record in a data page of a database |
PCT/CN2004/000668 WO2005066835A1 (fr) | 2003-12-31 | 2004-06-22 | Procede d'extraction d'un enregistrement d'une page de donnees d'une base de donnees |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2003101242014A CN1286043C (zh) | 2003-12-31 | 2003-12-31 | 一种在数据库里快速定位数据页中记录的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1556483A CN1556483A (zh) | 2004-12-22 |
CN1286043C true CN1286043C (zh) | 2006-11-22 |
Family
ID=34338975
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2003101242014A Expired - Lifetime CN1286043C (zh) | 2003-12-31 | 2003-12-31 | 一种在数据库里快速定位数据页中记录的方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20070124279A1 (zh) |
CN (1) | CN1286043C (zh) |
WO (1) | WO2005066835A1 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101127045B (zh) * | 2007-09-25 | 2010-04-21 | 中兴通讯股份有限公司 | 数据库可重复读实现方法、装置及数据库管理系统 |
CN101477550B (zh) * | 2009-01-22 | 2012-12-12 | 华为终端有限公司 | 基于嵌入式设备的数据查找方法、装置及嵌入式设备 |
CN102004728B (zh) * | 2009-09-01 | 2013-03-27 | 三星电子(中国)研发中心 | 数据库游标位置保存及复位方法 |
CN102520242A (zh) * | 2011-12-12 | 2012-06-27 | 宁夏隆基宁光仪表有限公司 | 一种电能表负荷曲线的记录方法 |
CN102831196A (zh) * | 2012-08-03 | 2012-12-19 | 漳州科能电器有限公司 | 一种快速负荷记录数据查询方法及应用 |
CN104182522B (zh) * | 2014-08-26 | 2017-04-19 | 中国科学院信息工程研究所 | 一种基于循环位图模型的辅助索引方法及装置 |
CN104618358B (zh) * | 2015-01-21 | 2018-04-27 | 迈普通信技术股份有限公司 | 一种快速访问acl规则链的方法及系统 |
CN110837647B (zh) * | 2018-08-16 | 2022-11-08 | 迈普通信技术股份有限公司 | 管理访问控制列表的方法及装置 |
CN109753382B (zh) * | 2018-12-10 | 2022-01-07 | 厦门市美亚柏科信息股份有限公司 | 一种数据库删除记录的恢复方法及系统 |
CN112256650B (zh) * | 2020-10-20 | 2024-05-31 | 广州市百果园网络科技有限公司 | 存储空间管理方法、装置、设备及存储介质 |
CN112398227A (zh) * | 2020-11-16 | 2021-02-23 | 国网辽宁省电力有限公司辽阳供电公司 | 基于d5000电网调度系统的变压器负载率的自动告警方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5379422A (en) * | 1992-01-16 | 1995-01-03 | Digital Equipment Corporation | Simple random sampling on pseudo-ranked hierarchical data structures in a data processing system |
JP3666907B2 (ja) * | 1994-10-20 | 2005-06-29 | 富士通株式会社 | データベース用ファイル格納管理システム |
US5687361A (en) * | 1995-02-13 | 1997-11-11 | Unisys Corporation | System for managing and accessing a dynamically expanding computer database |
US5884297A (en) * | 1996-01-30 | 1999-03-16 | Telefonaktiebolaget L M Ericsson (Publ.) | System and method for maintaining a table in content addressable memory using hole algorithms |
US6009425A (en) * | 1996-08-21 | 1999-12-28 | International Business Machines Corporation | System and method for performing record deletions using index scans |
ES2219774T3 (es) * | 1996-08-28 | 2004-12-01 | THOMAS & BETTS CORPORATION | Herramienta de instalacion de sujecion de cables. |
US5893086A (en) * | 1997-07-11 | 1999-04-06 | International Business Machines Corporation | Parallel file system and method with extensible hashing |
CN1144143C (zh) * | 1999-11-04 | 2004-03-31 | 无敌科技(西安)有限公司 | 使用快速查询索引结构的电子字典单词查询方法 |
EP1211610A1 (en) * | 2000-11-29 | 2002-06-05 | Lafayette Software Inc. | Methods of organising data and processing queries in a database system |
EP1407386A2 (en) * | 2001-06-21 | 2004-04-14 | ISC, Inc. | Database indexing method and apparatus |
-
2003
- 2003-12-31 CN CNB2003101242014A patent/CN1286043C/zh not_active Expired - Lifetime
-
2004
- 2004-06-22 WO PCT/CN2004/000668 patent/WO2005066835A1/zh active Application Filing
- 2004-06-22 US US10/584,010 patent/US20070124279A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
US20070124279A1 (en) | 2007-05-31 |
WO2005066835A1 (fr) | 2005-07-21 |
CN1556483A (zh) | 2004-12-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1286043C (zh) | 一种在数据库里快速定位数据页中记录的方法 | |
US7418544B2 (en) | Method and system for log structured relational database objects | |
US6446063B1 (en) | Method, system, and program for performing a join operation on a multi column table and satellite tables | |
CA2281287C (en) | Method and system for efficiently searching for free space in a table of a relational database having a clustering index | |
CN1020014C (zh) | 快速开启由路径名识别的磁盘文件的方法 | |
US20040205044A1 (en) | Method for storing inverted index, method for on-line updating the same and inverted index mechanism | |
CN102375852A (zh) | 建立数据索引的方法、利用该索引查询数据的方法和系统 | |
EP2030131A1 (en) | Data mining using an index tree created by recursive projection of data points on random lines | |
Kanth et al. | Dimensionality reduction for similarity searching in dynamic databases | |
CN102982067A (zh) | 以可重复方式遍历数据 | |
CN102222099A (zh) | 一种数据存储、查找方法及装置 | |
CN103744913A (zh) | 一种基于搜索引擎技术的数据库检索方法 | |
US5963961A (en) | Database reconstruction using embedded database backup codes | |
US20080033909A1 (en) | Indexing | |
CN101587484B (zh) | 一种基于T-lt树的主存数据库的索引方法 | |
CN106980680B (zh) | 数据存储方法及存储设备 | |
CN101256579A (zh) | 一种数据库范围查询数据组织的方法 | |
CN104424219A (zh) | 一种数据文件的管理方法及装置 | |
CN111400101B (zh) | 一种jfs2文件系统数据删除时的数据恢复方法及系统 | |
CN103473324A (zh) | 基于非结构化数据存储的多维业务属性检索装置及方法 | |
CN100347705C (zh) | 一种合并文件的方法 | |
WO2006095356A1 (en) | A method of logging transactions and a method of reversing a transaction | |
US20080071732A1 (en) | Master/slave index in computer systems | |
CN111782663A (zh) | 一种提升聚合查询效率的聚合索引结构及聚合索引方法 | |
CN1287316C (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 | ||
CX01 | Expiry of patent term | ||
CX01 | Expiry of patent term |
Granted publication date: 20061122 |