CN102136005B - 数据查询方法和装置 - Google Patents
数据查询方法和装置 Download PDFInfo
- Publication number
- CN102136005B CN102136005B CN 201110077110 CN201110077110A CN102136005B CN 102136005 B CN102136005 B CN 102136005B CN 201110077110 CN201110077110 CN 201110077110 CN 201110077110 A CN201110077110 A CN 201110077110A CN 102136005 B CN102136005 B CN 102136005B
- Authority
- CN
- China
- Prior art keywords
- time
- indexes
- array
- subtree
- data
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种数据查询方法和装置。其中该方法包括:在向存储模块的主存中的写入缓存区写数据的过程中,获取所述写入缓存区写满数据时的时间;将所述写入缓存区中的数据以页为单位存储到所述存储模块的NAND闪存中;接收所述NAND闪存返回的存储所述数据的页地址,建立包括所述时间和所述页地址对应关系的时间日志并存储在所述存储模块,供以时间为索引进行数据查询,通过本发明提供的数据查询方法和装置,实现了对具有时序特性的数据,以时间为索引进行查询对应的数据,大大提高了数据查询的速度。
Description
技术领域
本发明属于数据处理技术,尤其涉及一种数据查询方法和装置。
背景技术
随着无线传感器网络的发展,传感数据量也急剧增长,把传感数据在传感器本地存储,实现以数据为中心的传感器网络已成为传感器网络的一个研究热点。现有的传感器节点的存储能力有限,如低端的MicaZ节点只有512kByte,高端的Imote2节点也仅有32MByte存储,且能量有限,主要是电池供电。因此NAND闪存以其容量大,体积小,成本低,能耗低的特点,是现在嵌入式系统大容量存储扩展的首选,然而NAND闪存的读写擦除及寿命又有其独特的特点:以页为单位读写;以块为单位擦除,且每次写一个用过的页之前必须擦除其所在的块;NAND闪存的总的擦除次数有限为10000~100000次,因此传统的数据索引系统无法在NAND闪存上有效的工作,这为传感器存储扩展提出了挑战,现有针对NAND闪存在嵌入式系统中的应用的研究工作主要集中在:
(1)能耗优化:
能耗几乎所有的闪存传感器索引或文件系统都要考虑的问题,现有技术中由微软研究院提出的高效节能的传感器数据索引系统Flash Logger,它为存储和运算能力有限的传感器节点设计了一个新颖的数据结构有效地组织和压缩了存储在闪存中的数据,并且能够有效的对压缩的数据进行索引和查询。
(2)主存空间优化:
传感器节点的内存也是一个非常有限的资源,在现有的方法中,只有麻省大学的Capsule系统和微软研究院的Flash Logger系统在设计中考虑了节点内存空间的使用优化问题。Capsule采用了硬件抽象层,隐藏了从应用程序到闪存之间的数据操作,并使用日志索引结构设计以及写入缓存来提高主存使用效率。Flash Logger的主存优化后的代码使用大约500行nesC语言构成,共占用Moteiv公司的Tmote Sky节点大约14KB ROM和1.5KB RAM空间。
(3)时序数据优化:
针对无线传感网络时序数据本身的特点,目前仅有Flash Logger提供了简单的特定的时间范围内检索压缩过的时序数据的功能,但是,其实验的结果表明:随着时间窗口的增量查询成本明显增加,所以可以说并没有针对时序数据进行针对性的优化。
然而,在无线传感器节点利用有限的主存空间支持大容量的NAND闪存方面的研究中,针对海量数据进行查询时对速度,能耗的要求越来越高,目前应用NAND闪存的传感器网络没有根据传感器数据的时序特性来进行数据查询,也没有根据NAND闪存的读写擦除和寿命特征对数据的查询系统做进一步地优化。
发明内容
针对现有技术的上述缺陷,本发明实施例提供一种数据查询方法和装置。
本发明实施例提供一种数据查询方法,包括:
在向存储模块的主存中的写入缓存区写数据的过程中,获取所述写入缓存区写满数据时的时间;
将所述写入缓存区中的数据以页为单位存储到所述存储模块的NAND闪存中;
接收所述NAND闪存返回的存储所述数据的页地址,建立包括所述时间和所述页地址对应关系的时间日志并存储在所述存储模块,供以时间为索引进行数据查询。
本发明实施例提供一种数据查询装置,包括:存储模块、获取模块和处理模块,其中,所述存储模块包括主存和NAND闪存,所述主存中包括写入缓存区和读取缓存区,其中,
所述获取模块,用于在向所述写入缓存区写数据的过程中,获取所述写入缓存区写满数据时的时间;
处理模块,用于将所述写入缓存区中的数据以页为单位存储到所述NAND闪存中,并接收所述NAND闪存返回的存储所述数据的页地址,建立包括所述时间和所述页地址对应关系的时间日志,并存储在所述存储模块中;
查询模块,用于以时间为索引进行数据查询。
本发明实施例提供的数据查询方法和装置,通过根据数据的时序性特点,建立包括写入缓存区写满数据的时间和将写满的数据存储到NAND闪存中的页地址对应关系的时间日志,实现了对具有时序特性的数据,以时间为索引进行查询对应的数据,大大提高了数据查询的速度。
附图说明
图1为本发明数据查询方法实施例流程图;
图2为本发明数据查询方法实施例中以时间为索引进行数据查询的流程图;
图3为本发明数据查询方法实施例中数据查询过程中时间比较次数和扇出系数的关系示意图;
图4为本发明数据查询方法实施例中级联树索引结构示意图;
图5为本发明数据查询装置实施例结构示意图;
图6为本发明数据查询装置另一实施例结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明针对现有技术中应用NAND闪存的传感器网络并没有根据传感器数据的时序特性来进行数据查询,也没有根据NAND闪存的读写擦除和寿命特征对数据的查询系统做进一步地优化等缺陷,提出了一种解决方案即通过根据数据的时序性特点,建立包括写入缓存区写满数据的时间和将写入缓存区中写满的数据存储到NAND闪存中的页地址对应关系的时间日志,实现了对具有时序特性的数据,以时间为索引进行查询对应的数据,大大提高了数据查询的速度。
图1为本发明数据查询方法实施例流程图,如图1所示,该方法包括:
步骤100,在向存储模块的主存中的写入缓存区写数据的过程中,获取所述写入缓存区写满数据时的时间;
在向存储模块的主存中的写入缓存区写数据的过程中,每当数据装满一个写入缓存区,就把写入缓存区中最后写入数据的时间提取出来用做整个写入缓存区所写入的数据的标记。
步骤101,将所述写入缓存区中的数据以页为单位存储到所述存储模块的NAND闪存中;
把写满的写入缓存区中的数据以页为单位存储到存储模块的NAND闪存中。
步骤102,接收所述NAND闪存返回的存储所述数据的页地址,建立包括所述时间和所述页地址对应关系的时间日志并存储在所述存储模块,供以时间为索引进行数据查询。
NAND闪存返回存储写入缓存区中数据的页地址后,建立包括用于标记写入缓存区写满数据时的时间和存储写入缓存区中数据的页地址对应关系的时间日志,并将时间日志存储在存储模块中,供以时间为索引进行数据查询,可有效的支持无论是对时间点还是对时间区间内写入的数据进行查询,具体地,当时间日志存储在存储模块的主存空间里,以时间为索引进行数据查询时,查询速度非常快,但是占用的主存空间比较大;当时间日志存储在存储模块的NAND闪存中,以时间为索引进行数据查询时,每次都要访问NAND闪存,查询速度较慢,但是节约了有限的主存空间。
本实施例提供的数据查询方法,通过根据数据的时序性特点,建立包括写入缓存区写满数据的时间和将写入缓存区中写满的数据存储到NAND闪存中的页地址对应关系的时间日志,实现了对具有时序特性的数据,以时间为索引进行查询对应的数据,大大提高了数据查询的速度。
进一步地,根据NAND闪存以页为单位的特殊读写特性,根据具体应用的NAND闪存,将写入缓存区的容量设置为NAND闪存的页容量,在写入缓存区写满数据时,以页为单位存储到存储模块的NAND闪存芯片中,在NAND闪存中刚好存储了一页,提高了NAND闪存存储空间的利用率。
基于上述实施例,图2为本发明数据查询方法实施例中以时间为索引进行数据查询的流程图,如图2所示,具体步骤包括:
步骤200,接收输入的查询时间以获取在所述查询时间内存储到所述存储模块中的数据;
输入查询时间可以为时间点或者时间段,查询时间点或者时间段内存储到存储模块中NAND闪存中的数据;
步骤201,查询所述主存中的写入缓存区中存储的数据所对应的时间,若判断获知不包含所述查询时间,则根据所述存储模块中存储的所述时间日志获取包含所述查询时间的时间日志,并获取存储所述数据的页地址。
首先查询主存中写入缓存区存储的数据所对应的时间是否包含输入的查询时间,如果要查询的数据在写入缓存区中,则直接读取到读取缓存区,如果没有包含输入的查询时间,则根据存储模块中存储的时间日志,可以在主存中或者NAND闪存中获取包含查询时间的时间日志,找到与查询时间对应的页地址。
步骤202,根据所述页地址以页为单位从所述NAND闪存中读取所述数据到所述主存中的读取缓存区并获取在所述查询时间内存储的数据。
根据获取的页地址,从NAND闪存中以页为单位将数据读取到主存中的读取缓存区并获取在查询时间内存储的数据。
本实施例提供的数据查询方法,通过根据输入的查询时间从时间日志的索引中获取对应的时间日志,从而获得存储数据的页地址,实现了对具有时序特性的数据,以时间为索引进行查询对应的数据,大大提高了数据查询的速度。
基于上述实施例,将建立的包括写入缓存区写满数据的时间和将写入缓存区中写满的数据存储到NAND闪存中的页地址对应关系的时间日志通过树结构的方式存储到存储模块中,具体的树结构可以为小扇出系数非平衡树结构、大扇出系数非平衡树结构、小扇出系数平衡树结构或大扇出系数平衡树结构。
进一步地,将时间日志通过树结构的方式存储到存储模块的主存中具体包括:
设置子树扇出系数和子树索引数组的长度,构造以时间为索引进行数据查询的子树索引数组,构造的子树索引数组的层数是根据对子树索引数组的长度取子树扇出系数为底的对数而获得的,子树索引数组的底层用于存储时间日志,其余层是根据设置的子树扇出系数来存储底层存储的时间日志中所包含的时间,用于将输入的查询时间与子树索引数组中的时间进行比较,快速、准确的获取包含查询时间的时间日志。
构造子树索引数组的过程中关于子树扇出系数和子树索引数组的长度的设置与以时间为索引进行数据查询时进行时间比较的次数有关,图3为本发明数据查询方法实施例中数据查询过程中时间比较次数和扇出系数的关系示意图,如图3所示,横坐标为扇出系数,纵坐标为平均比较次数,四条曲线分别为子树索引数组的长度分别为8M,1M,256K和1K个时间日志时在不同的扇出系数下所对应的平均比较次数,针对不同的子树索引数组的长度,比较次数都随着子树扇出系数的增长而明显增加,如果扇出系数设置过大,则每次比较都要访问主存,消耗时间和能量,在设计时尽量选用小扇出系数,而小扇出系数的子树索引数组的平衡结构频繁分裂,索引空间利用率只有50%,由于主存空间资源有限,多采用非平衡树的子树索引数组结构,因此,构造小扇出系数非平衡树结构的子树索引数组既保证每次查找的比较次数少又避免了树节点频繁分裂导致主存空间利用率较低的问题。
若判断获知主存中正在写入的子树索引数组的底层中已存储的时间日志的个数没有达到设置的子树索引数组的长度,则将新生成的时间日志继续存储到该子树索引数组的底层;如果判断获知该子树索引数组的底层已存储的时间日志的个数已经达到设置的子树索引数组的长度,则在主存中生成新的子树索引数组以存储新生成的时间日志。
本实施例提供的数据查询方法,通过根据数据的时序性特点,建立包括写入缓存区写满数据的时间和将写入缓存区中写满的数据存储到NAND闪存中的页地址对应关系的时间日志,并在主存中以子树索引数组的方式存储时间日志,实现了对具有时序特性的数据,以时间为索引在主存中通过与子树索引数组中的时间进行比较后获得包含查询时间的时间日志,并获取对应的数据,减少了访问主存空间的次数,进一步提高了查询数据的速度。
基于上述实施例,由于主存空间有限,可以采用级联树索引结构,进一步地将子树索引数组的长度设置为NAND闪存中每块存储区所包含的页数的整数倍,将时间日志通过级联树索引结构的方式存储到存储模块具体包括:
设置根树扇出系数和根树索引数组的长度构造用于以时间为索引进行子树日志查询获取对应的子树索引数组的根树索引数组,根树索引数组的长度为NAND闪存中的总页数除以子树索引数组的长度而获得的,根树索引数组中存储的子树日志的个数达到子树索引数组的长度时,NAND闪存中的存储空间刚好存满数据,对根树索引数组的长度取根树扇出系数为底的对数获取根树索引数组的层数,根树索引数组的底层用于存储子树日志,其余的层是根据根树扇出系数来存储子树日志中所包含的时间。
在将时间日志存储到主存中的子树索引数组底层的过程中,若判断获知主存中正在写入的子树索引数组的底层中已存储的时间日志的个数已经达到子树索引数组的长度减一,就停止向该子树索引数组存储时间日志,获取最后一个存储到该子树索引数组底层上的时间日志中的时间,并将该子树索引数组存储到存储模块的NAND闪存中,其中,该子树索引数组的存储容量小于或等于NAND闪存中的页容量。
接收NAND闪存返回的存储子树索引数组的页地址,根据最后一个存储到子树索引数组中的时间日志中的时间和NAND闪存返回的存储时间日志的页地址的对应关系生成子树日志并存储在主存中的根树索引数组的底层,供以时间为索引进行子树日志查询。
进一步地,为了进一步减少对主存空间的消耗,在存储子树索引数组和根数索引数组时,可以只存储其叶子层节点即底层数据,也就是在主存中只存储根树索引数组中底层的子树日志和正在写入的子树索引数组底层的时间日志,在NAND闪存中只存储整个写满的子树索引数组中底层的时间日志,在查询数据时,其余层上存储的时间通过底层的时间日志和/或子树日志,根据子树扇出系数和/或根树扇出系数通过树结构算法来虚拟出树状逻辑结构获得其余层的时间,使系统在查询数据时和在一棵完整的子树索引数组和/或根数索引数组中查询效率相同,通过虚拟树状逻辑结构跟存储整个完整的树状逻辑结构相比能有效减少主存消耗25%左右(当扇出系数为4时)。
图4为本发明数据查询方法实施例中级联树索引结构示意图,如图4所示,系统运行时存放在主存中的根树索引数组以及正在写入的子树索引数组,将写满的子树索引数组里的时间日志存放在NAND闪存中相应的子树索引里,其中,子树索引数组的底层存放了时间日志,包括了写入缓存区写满数据的时间和页地址(子树索引数组底层的箭头所指,未示出)的对应关系,其余层存储时间日志中的时间用于获取与查询时间对应的数据所存储的页地址,根树索引数组的底层存放了子树日志,包括了存放子树索引数组的时间和页地址(根树索引数组底层的箭头所指,未示出)的对应关系,其余层存储子树日志中的时间用于获取查询与查询时间对应的时间日志所存储的页地址,具体以4作为子树索引数组和根树索引数组的扇出系数为例,子树索引数组的底层中每4个时间日志为一组,将每组中的最后一个时间日志中的时间写入上一层,以此类推,根树索引数组的底层中每4个子树日志为一组,将每组中的最后一个子树日志中的时间写入上一层,以此类推,若查询时间为3,与根树索引数组中存储的时间从上到下的进行比较,判断出比20小,则获取包含时间20的子树日志,根据与20对应的页地址,从NAND闪存中获取对应的存储时间日志的子树索引数组,在主存中与读取出的子树索引数组中存储的时间从上到下的进行比较,并判断出3比5小,找到对应的第1组时间日志,包含3的时间日志就在第一组中,快速准确的获取对应的时间日志,再根据时间日志中的页地址从NAND闪存中读取数据。
本实施例提供的数据查询方法,通过根据数据的时序性特点,建立包括写入缓存区写满数据的时间和将写入缓存区中写满的数据存储到NAND闪存中的页地址对应关系的时间日志,并在NAND闪存存储写满的子树索引数组中的时间日志,在主存中存储正在写入时间日志的子树索引数组和写入子树日志的根树索引数组,实现了对具有时序特性的数据,以时间为索引在主存中通过与根树索引数组中的时间进行比较后获得包含查询时间的子树日志,从NAND闪存中获取对应的子树索引数组中的时间日志,再通过与子树索引数组中的时间进行比较获取包含查询时间的时间日志,并获取对应的数据,既大大节约了有限的主存空间资源,又减少了访问主存空间的次数,大大地提高了查询数据的速度。
基于上述实施例,在将建立的子树日志存储到主存中的根树索引数组底层的过程中,若判断获知主存中根树索引数组的底层中已存储的子树日志的个数已经达到设置的根树索引数组的长度,则说明NAND闪存已满,没有空间进行数据存储,根据NAND闪存的擦出特点,以块为单位从NAND闪存中擦除最早存储的时间日志,这些时间日志是主存中写满的子树索引数组中的时间日志,当子树索引数组底层中存储的时间日志的个数达到子树索引数组的长度减一,则不再写入,将这些时间日志以页为单位存储到NAND闪存中,以及这些时间日志里的页地址里所存储的数据,上述实施例中提到子树索引数组的长度设置为NAND闪存中每块存储区所包含的页数的整数倍,因此以块为单位进行擦除时会完整的擦除一棵子树索引数组中的存储的时间日志以及里面页地址上存储的数据。
擦除以后的NAND闪存空间用以存储写入缓存区写满时所对应的数据,将这些数据存储到NAND闪存中后新生成的时间日志写入主存空间里正在写入的子树索引数组的底层,当子树索引数组底层中存储的时间日志的个数达到子树索引数组的长度减一时,提取最后一个写入的时间日志中的时间并将写满的时间日志存储到擦除以后的NAND闪存空间里,并根据存储时间日志返回的页地址在主存空间里的根树索引数组底层中找到包含该页地址的子树日志,更新子树日志里与该页地址对应的时间。
本实施例提供的数据查询方法,在NAND闪存没有空间存储的情况下,通过擦除NAND闪存中最早存入的时间日志和对应的数据,并根据新存储的时间日志的页地址,应用新存储进来的子树索引数组中最后一个时间日志中的时间更新根树索引数组中包含该页地址的子树日志中的时间,实现了根据NAND闪存的擦除特性对数据以子树索引数组结构进行更新,使NAND闪存进行了循环充分的利用。
基于上述实施例,若CPU停止工作,为了防止数据丢失,将主存中根树索引数组的底层的子树日志和正在写入的子树索引数组的底层的时间日志存储到NAND闪存中,当CPU再次开始工作的时候,先从NAND闪存中将根树索引数组的底层的子树日志和正在写入的子树索引数组的底层的时间日志读取到主存中,再根据数据的时序特性建立索引,并且以时间为索引进行数据的查询。
本实施例提供的数据查询方法,通过将主存中根树索引数组的底层的子树日志和正在写入的子树索引数组的底层的时间日志在CPU停止工作时存储到NAND闪存中,更进一步地保证了数据索引的安全性和以时间为索引进行数据查询的可靠性。
基于上述本发明提供的数据查询方法实施例中通过存储模块中的级联树索引结构,为了更清楚的说明存储模块中主存和NAND闪存具体的存储数据,见表1和表2所示,其中,表1为本发明数据存储方法实施例中系统运行时主存空间的划分,表2为本发明数据存储方法实施例中系统运行时NAND闪存空间的划分。
表1
根树索引数组 | 正在写入的子树索引数组 | 读写缓存 | 其他程序区 |
表2
将上述本发明提供的数据查询方法实施例中通过存储模块中的级联树索引结构,以时间为索引进行数据查询的具体处理步骤归纳如下:
一、级联树索引结构的建立:
步骤1,如果写入缓存区未写满时写数据到写入缓存区,否则执行步骤2;
步骤2,把写满的写入缓存区写入到NAND闪存中,并生成一个新的时间日志插入到主存中正在写入的子树索引数组中后执行步骤3;
步骤3,检查正在写入的子树索引数组是否写满(子树索引数组长度减一),如果写满则执行步骤4,否则到步骤6;
步骤4,把写满的子树索引数组中的时间日志写入到NAND闪存对应的存放时间日志的索引区,并生成一个子树日志写入到主存中的根树索引数组中,如果根树索引数组写满则执行步骤5,否则执行步骤6;
步骤5,调用数据删除算法,擦除一棵使用过的子树索引数组,并设其为正在写入的子树索引数组,到步骤6;
步骤6,终止。
二、数据删除算法:
针对数据时序性特征及网络应用的特点,本实施例中采用了先进先出队列式的删除模型,当根树索引数组插满子树日志即NAND闪存写满之后,直接从NAND闪存中删掉当前存储的最早的数据。
步骤1,在NAND闪存中擦除最早的一棵子树索引数组及对应的数据设其为正在写入的子树索引数组的索引区和数据存储区并执行步骤2;
步骤2,偏移量offset加1,执行步骤3;
步骤3,终止。
三、开机快速装载和非正常关机索引恢复的处理步骤:
步骤1,检查上次操作是否是正常关机,如果是执行步骤2,否则执行步骤3;
步骤2,直接把NAND闪存中包含根树索引数组和正在写入的子树索引数组装载到主存,执行步骤4;
步骤3,扫描每棵子树索引区的子树索引数组所在的页,并在主存中恢复根树索引数组,扫描正在写入的子树索引区的每一页,在主存中恢复正在写入的子树索引数组,到步骤4。
步骤4,终止。
四、以时间为索引,通过级联树索引结构查询数据的处理步骤:
本发明提供的数据查询方法实施例中的根树索引数组和子树索引数组在逻辑结构上是完全相同的,所以对数据的查询只需要通过递归的调用树查询算法,便可实现对整个NAND闪存空间的快速索引查询:
步骤1,查询写入缓存区和读取缓存区,如果查询的时间存在于缓存中,则执行步骤4,否则执行步骤2;
步骤2,调用树查询算法查询正在写入的子树索引数组,如果查询的时间在正在写入的子树索引数组中,将包含该时间的NAND闪存中的页存储的数据读到主存中的读取缓存区,执行步骤4,否则,执行步骤3;
步骤3,调用树查询算法查询根树索引数组,得到包含查询时间的子树索引页地址,把该页中的子树索引数组读到主存中并再次调用树查询算法对其进行查询,找到包含该时间的NAND闪存页并读到主存中的读取缓存区,执行步骤4;
步骤4,终止;
为了更清楚的说明上述数据查询方法的处理流程,下面以级联树索引结构为例进行详细的说明以及如何以时间为索引进行数据查询,但并不以此为限,时间日志索引结构的具体设置应根据具体的应用场景进行设置。
存储模块中NAND闪存中的块容量有32页,总容量为1024页(只是为了举例说明处理流程,NAND闪存的实际存储容量很大),设置子树索引数组的长度为64,子树扇出系数为4,那么对64取以4为底的对数获得子树索引数组的层数为3,自上而下分别为第1层,第2层,第3层,设置根树索引数组的长度为16,根树扇出系数为4,那么对16取以4为底的对数获得根树索引数组的层数为2,自上而下分别为第1层,第2层。
开机后主存中的写入缓存区写满数据时对应的时间为5,(5只是为了举例说明,计算机系统里的程序中所用到的是系统时间而不是实际时间,系统会将输入的查询时间转换为系统识别的时间),将写入缓存区中的数据以页为单位存储到NAND闪存中的第1页,并将存储数据的页地址返回给主存,那么建立第1个包括5和1的对应关系的时间日志,用于表示开机到8:00之间采集的数据存储在NAND闪存中的第1页,将第1个时间日志写入子树索引数组的第3层,判断写入的时间日志的个数是否达到子树索引数组的长度64减去1即63,如果没有,向正在写入的子树索引数组的第3层依次存储新生成的时间日志,同时,根据设置的子树扇出系数4,就表示4个时间日志为一组,在向子树索引数组的第3层写入时间日志的过程中,将每组时间日志中的最后一个时间日志(是4的整数倍)中的时间写入子树索引数组的第2层比如第4个,第8个时间日志中的时间,那么子树索引数组的第2层,共有4组16个时间,每4个为一组,同样的,将第2层中每一组的最后一个时间存储到子树索引数组的第1层,共有4个。
当判断子树索引数组的第3层写入的时间日志的个数为63时,就提取第63个时间日志中的时间比如说是80,将子树索引数组的第3层中已存储的63个时间日志存储到NAND闪存中的第64页,并返回页地址,建立第1个包括80和64对应关系的子树日志,如果80表示的实际时间是10:00,则第1个子树日志用于表示开机到10:00之间采集的数据所对应的时间日志存储在NAND闪存中的第64页,所采集的数据存储在NAND闪存中的第1页至第63页,并将第1个子树日志存储到主存中的根树索引数组的第2层,根据设置的根树扇出系数4,就表示4个子树日志为一组,在向根树索引数组的第2层写入子树日志的过程中,将每组子树日志中的最后一个子树日志(是4的整数倍)中的时间写入根树索引数组的第1层比如第4个,第8个子树日志中的时间,那么根树索引数组的第1层,共有1组4个时间,当输入查询时间,计算机系统将查询时间自动转换为系统内部对应的时间,在查询时将时间与子树索引数组的第1层和第2层存储的时间和根树索引数组第1层存储的时间进行比较,快速准确的定位包含与查询时间对应的时间日志,获取页地址并获取数据,可以在大大节省主存空间的情况下,减少访问主存空间的次数,节约能耗并提高查询速度。
如果根树索引数组第2层存储的子树日志的个数已达到根树索引数组的长度16,表示NAND闪存的总容量1024页已存满数据,就以块为单位擦除NAND闪存中存储第1个子树索引数组第3层中时间日志和所对应的数据的存储空间即第1页至第64页,第1至63页继续存储写入缓存区中写满的数据,第64页存储主存中新写满的子树索引数组第2层上存储的63个时间日志,并将最后一个时间日志中包含的时间提取出来更新主存中根树索引数组第2层中第1个子树日志里与第64页对应的时间,如果系统关机,就将主存中正在写入的子树索引数组中的时间日志和根树索引数组中的子树日志存储到NAND闪存中的系统区,开机的时候重新装载到主存中以防数据丢失。具体的以时间为索引通过级联树索引结构进行数据查询的程序如下:
输入:查询时间T(实际时间,系统会自动转换为系统识别的时间),扇出系数X,索引数组长度N,偏移量offset,索引数组I[];(X、N、I[]的数值在查询前系统已经设置好了,会在运行程序时自动输入)
输出:NAND闪存中的页地址;
H=logxN;对索引数组长度N取扇出系数X为底的对数得到索引树的高度;
j=H,p=0;给当前查找高度标记j赋初值为H,位置指针P赋初值为0
while
j>1,do当前查询高度大于1,既未达到叶子层就循环的执行下面的查找操作;
j=j-1;高度标记减1
i=1;当前比较位置赋初值为1
while
i<x,do当i小于扇出系数
ifT<I[(offset+p*X(j+1)+i*Xj)modN].time
then
p=i;把i赋给p
break;跳出循环
endif
i=i+1;
endwhile
endwhile
k=1;叶子层节点位置指针k赋初值为1
while
k<x,do当k小于扇出系数
ifT<I[(offset+k+p*Xj-1)modN].time
then
A=I[(offset+k+p*Xj-1)modN].time
returnA
endif
k=k+1;
endwhile
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图5为本发明数据查询装置实施例结构示意图,如图5所示,该装置包括:存储模块1、获取模块2、处理模块3和查询模块4,其中,存储模块1包括主存11和NAND闪存12,主存11中包括写入缓存区111和读取缓存区112,其中,获取模块2用于在向写入缓存区111写数据的过程中,获取写入缓存区111写满数据时的时间;处理模块3用于将写入缓存区111中的数据以页为单位存储到NAND闪存12中,并接收NAND闪存12返回的存储数据的页地址,建立包括时间和页地址对应关系的时间日志,并存储在存储模块1中;查询模块4用于以时间为索引进行数据查询。
本实施例提供的数据查询装置的功能和处理流程,可以参见上述方法实施例,此处不再赘述。
本实施例提供的数据查询装置,通过根据数据的时序性特点,建立包括写入缓存区写满数据的时间和将写入缓存区中写满的数据存储到NAND闪存中的页地址对应关系的时间日志,实现了对具有时序特性的数据,以时间为索引进行查询对应的数据,大大提高了数据查询的速度。
图6为本发明数据查询装置另一实施例结构示意图,如图6所示,基于上述实施例,查询模块4包括:接收单元41、寻址单元42和读取单元43,其中,接收单元41用于接收输入的查询时间以获取在查询时间内存储到存储模块1中的数据;寻址单元42用于查询主存11中的写入缓存区111中存储的数据所对应的时间,若判断获知不包含查询时间,则根据存储模块1中存储的时间日志获取包含查询时间的时间日志,并获取存储数据的页地址;读取单元43用于根据页地址以页为单位从NAND闪存12中读取数据到主存11中的读取缓存区112并获取在查询时间内存储的数据。
本实施例提供的数据查询装置,通过根据输入的查询时间从时间日志的索引中获取对应的时间日志,从而获得存储数据的页地址,实现了对具有时序特性的数据,以时间为索引进行查询对应的数据,大大提高了数据查询的速度。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (8)
1.一种数据查询方法,其特征在于,包括:
在向存储模块的主存中的写入缓存区写数据的过程中,获取所述写入缓存区写满数据时的时间;
将所述写入缓存区中的数据以页为单位存储到所述存储模块的NAND闪存中;
接收所述NAND闪存返回的存储所述数据的页地址,建立包括所述时间和所述页地址对应关系的时间日志并存储在所述存储模块,供以时间为索引进行数据查询;
具体地,通过树结构存储所述时间日志,设置子树索引数组的长度为所述NAND闪存中每块存储区所包含的页数的整数倍,所述子树索引数组的存储容量小于或等于所述页容量;
若判断获知所述主存中正在写入的子树索引数组的底层中已存储的时间日志的个数已经达到所述子树索引数组的长度减一,则获取最后一个存储的时间日志中的时间,并将所述子树索引数组存储到所述NAND闪存中;
接收所述NAND闪存返回的存储所述子树索引数组的页地址,且根据所述时间和所述页地址的对应关系生成子树日志并存储在所述主存中的根树索引数组的底层,供以时间为索引进行所述子树日志查询,其中,所述根树索引数组通过设置根树扇出系数和根树索引数组的长度进行构造,所述根树索引数组的长度为所述NAND闪存中的总页数除以所述子树索引数组的长度而获得的,获取所述根树索引数组的层数,所述根树索引数组的层数为所述根树扇出系数为底的所述根树索引数组的长度的对数,所述根树索引数组的底层用于存储所述子树日志,其余的层是根据所述根树扇出系数来存储所述子树日志中包含的时间。
2.根据权利要求1所述的数据查询方法,其特征在于,所述方法还包括:
设置所述写入缓存区的容量为所述NAND闪存中的页容量。
3.根据权利要求1或2所述的数据查询方法,其特征在于,所述以时间为索引进行数据查询包括:
接收输入的查询时间以获取在所述查询时间内存储到所述存储模块中的数据;
查询所述主存中的写入缓存区中存储的数据所对应的时间,若判断获知不包含所述查询时间,则根据所述存储模块中存储的所述时间日志获取包含所述查询时间的时间日志,并获取存储所述数据的页地址;
根据所述页地址以页为单位从所述NAND闪存中读取所述数据到所述主存中的读取缓存区并获取在所述查询时间内存储的数据。
4.根据权利要求1所述的数据查询方法,其特征在于,所述通过树结构存储所述时间日志,供以时间为索引进行数据查询包括:
设置子树扇出系数和子树索引数组的长度,构造以时间为索引进行数据查询的子树索引数组,获取所述子树索引数组的层数,所述子树索引数组的层数为以所述子树扇出系数为底的所述子树索引数组的长度的对数,所述子树索引数组的底层用于存储所述时间日志,其余层是根据所述子树扇出系数来存储所述时间日志中包含的时间;
若判断获知所述主存中正在写入的子树索引数组的底层中已存储的时间日志的个数达到所述子树索引数组的长度,则所述子树索引数组已写满,将新生成的时间日志写入所述主存中下一棵子树索引数组的底层。
5.根据权利要求1所述的数据查询方法,其特征在于,所述方法还包括:
若判断获知所述主存中根树索引数组的底层中已存储的子树日志的个数已经达到所述根树索引数组的长度,则以块为单位擦除所述NAND闪存中最早存储的所述时间日志和对应的数据,以存储所述写入缓存区的数据和所述时间日志,并根据存储所述时间日志返回的页地址,应用新存储到所述NAND闪存中的子树索引数组中的最后一个时间日志中的时间更新所述子树日志中的时间。
6.根据权利要求1所述的数据查询方法,其特征在于,所述方法还包括:
若CPU停止工作,将所述主存中根树索引数组的底层的子树日志和正在写入的子树索引数组的底层的时间日志存储到所述NAND闪存中。
7.一种数据查询装置,其特征在于,包括:存储模块、获取模块、处理模块和查询模块,其中,所述存储模块包括主存和NAND闪存,所述主存中包括写入缓存区和读取缓存区,其中,
所述获取模块,用于在向所述写入缓存区写数据的过程中,获取所述写入缓存区写满数据时的时间;
所述处理模块,用于将所述写入缓存区中的数据以页为单位存储到所述NAND闪存中,并接收所述NAND闪存返回的存储所述数据的页地址,建立包括所述时间和所述页地址对应关系的时间日志,并存储在所述存储模块中;
所述查询模块,用于以时间为索引进行数据查询;
具体地,通过树结构存储所述时间日志,设置子树索引数组的长度为所述NAND闪存中每块存储区所包含的页数的整数倍,所述子树索引数组的存储容量小于或等于所述页容量;
若判断获知所述主存中正在写入的子树索引数组的底层中已存储的时间日志的个数已经达到所述子树索引数组的长度减一,则获取最后一个存储的时间日志中的时间,并将所述子树索引数组存储到所述NAND闪存中;
接收所述NAND闪存返回的存储所述子树索引数组的页地址,且根据所述时间和所述页地址的对应关系生成子树日志并存储在所述主存中的根树索引数组的底层,供以时间为索引进行所述子树日志查询,其中,所述根树索引数组通过设置根树扇出系数和根树索引数组的长度进行构造,所述根树索引数组的长度为所述NAND闪存中的总页数除以所述子树索引数组的长度而获得的,获取所述根树索引数组的层数,所述根树索引数组的层数为所述根树扇出系数为底的所述根树索引数组的长度的对数,所述根树索引数组的底层用于存储所述子树日志,其余的层是根据所述根树扇出系数来存储所述子树日志中包含的时间。
8.根据权利要求7所述的数据查询装置,其特征在于,所述查询模块包括:
接收单元,用于接收输入的查询时间以获取在所述查询时间内存储到所述存储模块中的数据;
寻址单元,用于查询所述主存中的写入缓存区中存储的数据所对应的时间,若判断获知不包含所述查询时间,则根据所述存储模块中存储的所述时间日志获取包含所述查询时间的时间日志,并获取存储所述数据的页地址;
读取单元,用于根据所述页地址以页为单位从所述NAND闪存中读取所述数据到所述主存中的读取缓存区并获取在所述查询时间内存储的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110077110 CN102136005B (zh) | 2011-03-29 | 2011-03-29 | 数据查询方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110077110 CN102136005B (zh) | 2011-03-29 | 2011-03-29 | 数据查询方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102136005A CN102136005A (zh) | 2011-07-27 |
CN102136005B true CN102136005B (zh) | 2013-07-17 |
Family
ID=44295791
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110077110 Active CN102136005B (zh) | 2011-03-29 | 2011-03-29 | 数据查询方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102136005B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929790A (zh) * | 2012-10-15 | 2013-02-13 | 株洲南车时代电气股份有限公司 | 一种数据存储系统和方法 |
CN102890722B (zh) * | 2012-10-25 | 2015-03-11 | 国家电网公司 | 应用于时序历史数据库的索引方法 |
CN104750727B (zh) * | 2013-12-30 | 2019-03-26 | 沈阳亿阳计算机技术有限责任公司 | 一种列式内存存储查询装置及列式内存存储查询方法 |
CN104834648B (zh) * | 2014-02-12 | 2018-07-31 | 华为技术有限公司 | 日志查询方法和装置 |
CN104978148A (zh) * | 2014-04-09 | 2015-10-14 | 瑞萨电子(中国)有限公司 | 数据写入方法及装置、数据读取方法及装置 |
CN105975515A (zh) * | 2016-04-28 | 2016-09-28 | 东莞市华睿电子科技有限公司 | 一种节点压缩方法以及多模匹配方法 |
CN107797755B (zh) * | 2016-09-05 | 2021-01-08 | 上海宝存信息科技有限公司 | 固态硬盘系统的原子写入方法以及使用该方法的装置 |
CN106815355A (zh) * | 2017-01-22 | 2017-06-09 | 济南浪潮高新科技投资发展有限公司 | 一种用于NANDflash阵列的文件系统实现方法 |
CN108427705B (zh) * | 2018-01-17 | 2022-04-12 | 平安科技(深圳)有限公司 | 电子装置、分布式系统日志查询方法及存储介质 |
CN108345648B (zh) * | 2018-01-18 | 2021-01-26 | 奇安信科技集团股份有限公司 | 一种基于列式存储的获取日志信息的方法及装置 |
CN110569397A (zh) * | 2019-09-06 | 2019-12-13 | 百度在线网络技术(北京)有限公司 | 网络社区的信息查询方法、装置、设备及存储介质 |
CN111857581A (zh) * | 2020-07-06 | 2020-10-30 | 浙江鸿泉电子科技有限公司 | 一种数据存储的处理方法及系统 |
CN111782661B (zh) * | 2020-07-21 | 2024-07-05 | 杭州海康威视数字技术股份有限公司 | 一种数据存储方法、数据查询方法和装置 |
CN113741813B (zh) * | 2021-08-19 | 2024-03-29 | 上海卫星工程研究所 | 载荷数据点播回放实现系统、方法、介质及设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101055589A (zh) * | 2007-05-30 | 2007-10-17 | 北京航空航天大学 | 嵌入式数据库的存储管理方法 |
CN101534213A (zh) * | 2009-04-09 | 2009-09-16 | 成都市华为赛门铁克科技有限公司 | 一种日志的获取方法及日志服务器 |
-
2011
- 2011-03-29 CN CN 201110077110 patent/CN102136005B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101055589A (zh) * | 2007-05-30 | 2007-10-17 | 北京航空航天大学 | 嵌入式数据库的存储管理方法 |
CN101534213A (zh) * | 2009-04-09 | 2009-09-16 | 成都市华为赛门铁克科技有限公司 | 一种日志的获取方法及日志服务器 |
Non-Patent Citations (2)
Title |
---|
Efficient Indexing Data Structures for Flash-Based Sensor Devices;SONG LIN et al.;《ACM Transactions on Storage》;20061130;第2卷(第4期);468-503 * |
SONG LIN et al..Efficient Indexing Data Structures for Flash-Based Sensor Devices.《ACM Transactions on Storage》.2006,第2卷(第4期),468-503. |
Also Published As
Publication number | Publication date |
---|---|
CN102136005A (zh) | 2011-07-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102136005B (zh) | 数据查询方法和装置 | |
CN102364474B (zh) | 用于机群文件系统的元数据存储系统和管理方法 | |
CN106527969B (zh) | 一种寿命均衡的NandFlash存储器读写方法 | |
CN103186350A (zh) | 混合存储系统及热点数据块的迁移方法 | |
CN103176916B (zh) | 闪存及闪存的地址转换方法 | |
CN103440207A (zh) | 缓存方法及装置 | |
CN102629269B (zh) | 一种嵌入式数据库的检索及存储方法 | |
CN111367469B (zh) | 一种分层存储数据迁移方法和系统 | |
CN101819509A (zh) | 一种固态硬盘读写方法 | |
CN105980992B (zh) | 一种存储系统、识别数据块稳定性的方法以及装置 | |
CN101493821A (zh) | 数据缓存方法和装置 | |
CN109582593A (zh) | 一种基于计算的ftl地址映射方法及数据读、写方法 | |
CN103164490A (zh) | 一种不固定长度数据的高效存储实现方法和装置 | |
CN102103596B (zh) | 在嵌入式系统中实现文件系统的方法 | |
CN103186617B (zh) | 一种存储数据的方法和装置 | |
CN106776375A (zh) | 一种磁盘内部的数据缓存方法及装置 | |
CN109144885A (zh) | 固态存储设备的垃圾回收方法与固态存储设备 | |
CN104699424A (zh) | 一种基于页面热度的异构内存管理方法 | |
CN101576856A (zh) | 一种基于长短周期访问频度的缓存数据替换方法 | |
CN109388341A (zh) | 一种基于Device Mapper的系统存储优化方法 | |
CN104156432A (zh) | 一种文件访问方法 | |
CN103399915A (zh) | 一种搜索引擎索引文件的优化读取方法 | |
On et al. | Lazy-update B+-tree for flash devices | |
CN103020323B (zh) | 一种基于未知长度二分查找的闪存数据检索存储的方法 | |
CN107274923A (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 |