Nothing Special   »   [go: up one dir, main page]

CN100468402C - 一种数据存储及查询方法 - Google Patents

一种数据存储及查询方法 Download PDF

Info

Publication number
CN100468402C
CN100468402C CNB2005101166630A CN200510116663A CN100468402C CN 100468402 C CN100468402 C CN 100468402C CN B2005101166630 A CNB2005101166630 A CN B2005101166630A CN 200510116663 A CN200510116663 A CN 200510116663A CN 100468402 C CN100468402 C CN 100468402C
Authority
CN
China
Prior art keywords
node
pointer
split catalog
data
split
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
Application number
CNB2005101166630A
Other languages
English (en)
Other versions
CN1955958A (zh
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.)
Beijing Jingdong Shangke Information Technology Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CNB2005101166630A priority Critical patent/CN100468402C/zh
Publication of CN1955958A publication Critical patent/CN1955958A/zh
Application granted granted Critical
Publication of CN100468402C publication Critical patent/CN100468402C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

公开了一种数据存储方法,对所述数据进行至少一次分类,得到分类数据和所述分类数据的各级分类目录,将所述分类数据存储到计算机的内存空间中;采用二叉结构目录树存储所述分类数据的各级分类目录,用固定大小的内存空间存储所述目录树上的每个节点,利用递归算法分别建立与所述分类数据的各级分类目录一一对应的节点;预先在内存中生成一个映射表,并在建立每个节点的同时在预先生成的映射表中保存所述节点的节点标识与指向该节点所在内存空间的指针之间的映射关系。本发明还公开了一种数据查询方法。通过上述方法可以有效地节省内存空间,增加内存资源的使用效率,同时简化分类数据的存储以及分类目录的移动、增加以及删除操作。

Description

一种数据存储及查询方法
技术领域
本发明涉及到数据的管理技术,特别涉及到一种数据存储及查询方法。
背景技术
随着目前数据信息的爆炸性增长以及计算机应用领域的不断扩大,计算机已经成为人们生活中不可或缺的数据管理工具,无论是数据采集、处理、存储以及检索等等操作均离不开计算机,因此,如何有效、快速地存储数据以及如何快速地检索出所需要的数据已成为当前数据管理所要解决的主要问题。
目前对于分类数据通常可以采用树状结构来进行存储,存储这些分类目录的树状结构又称为目录树。使用目录树存储分类数据的方法包括:首先建立一个根节点,该根节点包含至少一个一级子节点,所述一级子节点的数量根据所述分类数据经过一次分类以后得到的一级分类目录的个数而定,令每个子节点对应一个一级分类目录,记录该一级分类目录的名称或标识等信息。其中,每个一级子节点还可以进一步包含至少一个二级子节点,相应地,每个二级子节点将对应于其父节点所对应一级分类目录所包含的数据经过分类后得到的二级分类目录,记录该二级分类目录的名称等信息。如此循环下去,得到若干个n级子节点(在这里所述的n为自然数),这些n级子节点所对应的n级分类目录将不能够再进一步分类了,此时,可以将这些n级子节点称为叶子节点,这些叶子节点除了要记录所对应n级分类目录的名称或标识之外,还需要进一步存储所对应n级分类目录所包含的分类数据。
图1显示了一种使用上述目录树存储的商品目录。从图1可以看出,各种商品数据经过一次分类后得到若干一级分类目录,例如电脑、珠宝首饰以及手机等等目录,将对应于图1所示目录树的各个一级子节点;而每个一级分类目录所包含商品还可以进一步进行二次分类得到的若干二级分类目录,例如,电脑目录还可以进一步划分为笔记本、台式机以及办公设备等等目录,这些二级分类目录将对应于图1所示目录树的各个二级子节点。对于无法再进行分类的分类目录而言,例如IBM或DELL等目录,将对应于图1所示目录树的叶子节点,除了在上述叶子节点上存储对应分类目录的名称或标识之外,还将进一步存储其对应分类目录所包含的各种商品信息,例如IBM笔记本电脑的各个商品信息或DELL笔记本电脑的各个商品信息。
通过上述树状结构可以清楚的指示出各级分类目录之间的分类关系,实现对分类数据的有效管理。然而,由于上述目录树实际上采用了多叉树的数据结构,该多叉树中每个节点所包含子节点的数目将对应于该节点所对应目录划分的子目录个数,因此,每个节点所包含子节点的数目是不确定的,或者说是不可预知的,这将导致目录树上的每个节点所需要存储空间的大小不能确定,从而造成数据存储过程中对存储空间的分配操作过于复杂。特别是在将上述存储方法应用到海量数据的管理时,例如电子商务中的商品目录管理、以及图书馆信息管理等等,由于海量数据所包含的信息量是非常巨大的,使得每个节点所包含的子节点数目过多,这将导致每个节点所存储的信息过于庞大,不但进一步增加了存储空间分配操作的复杂度,还将造成存储空间资源的浪费。
另外,在上述由多叉树结构目录树存储的分类数据的分类关系发生变化时,例如在增加、移动或删除某个分类目录时,还需要考虑该分类目录父节点存储空间的分配以及回收等问题,使得分类目录的增加、删除以及移动操作非常复杂。
发明内容
为了解决现有技术存在的问题,本发明提供了一种数据存储方法,可以有效地节省内存空间,同时简化分类数据的存储以及分类目录的移动、增加以及删除操作。
本发明还提供了一种数据查询方法,可以快速的检索到需要查询的分类目录,获得该分类目录所包含的分类数据。
一种数据存储方法,对所述数据进行至少一次分类,得到分类数据和所述分类数据的各级分类目录,将所述分类数据存储到计算机的内存空间中;采用二叉结构目录树存储所述分类数据的各级分类目录,用固定大小的内存空间存储所述目录树上的每个节点,所述每个节点至少包括该节点所对应分类目录的节点标识、孩子节点指针、兄弟节点指针以及数据指针;A、建立所述目录树的根节点,令该根节点的兄弟节点指针为空,数据指针为空,并建立一个新的节点,令所述根节点的孩子节点指针指向所建立的新节点,将所述新节点对应于分类数据的一个一级分类目录;B、利用递归算法分别建立与所述分类数据的各级分类目录一一对应的节点,对应每个节点,若该节点所对应的分类目录包含下一级的分类目录,则令该节点的孩子节点指针指向一个对应于本节点所对应分类目录下一级分类目录的节点,并令该节点数据指针为空,否则,令该节点孩子节点指针为空,并令该节点数据指针指向用于保存本节点所对应的分类目录所包含的分类数据的内存空间;若所述目录树中已包含对应于该节点所对应分类目录同级分类目录的所有节点,则令该节点的兄弟节点指针为空,否则,令该节点的兄弟节点指针指向一个对应于本节点所对应分类目录的同级目录且未包含在所述目录树中的节点;预先在内存中生成一个映射表,并在建立每个节点的同时在预先生成的映射表中保存所述节点的节点标识与指向该节点所在内存空间的指针之间的映射关系。
步骤B所述利用递归算法在所述目录树中建立与所述分类数据的所有分类目录一一对应的所有节点包括以下步骤:
C、令新建立的节点为当前节点,并判断当前节点所对应的分类目录是否具有下一级分类目录,如果有,则设置当前节点的数据指针为空,再建立一个新的节点,令当前节点的孩子节点指针指向在本步骤建立的新节点,并设置所述新节点对应于当前节点所对应分类目录的一个下一级分类目录,然后返回本步骤C;否则,设置当前节点的孩子节点指针为空,并将当前节点的数据指针指向用于保存当前节点对应分类目录所包含的分类数据的内存空间,然后执行步骤D;
D:判断当前节点所对应的分类目录是否具有未加入到该目录树中的同级分类目录,如果有,则建立一个新的节点,令当前节点的兄弟节点指针指向本步骤所建立的新节点,并设置所述新节点对应于当前节点所对应分类目录的一个未加入到该目录树中的同级分类目录,然后返回步骤C;否则,返回到当前节点所对应分类目录上一级分类目录对应的节点,并判断该节点是否为根节点,如果是,则结束,否则,令该节点为当前节点,并返回本步骤D。
本发明所述方法进一步包括添加分类数据到某个分类目录,具体为:
A1:根据所要添加到的分类目录在所述目录树中找到对应该分类目录的节点;
A2:设置该节点数据指针所指向的指针数组的第一个指针元素为当前的指针元素;
A3:判断当前指针元素所指向的内存空间是否为空,如果是,则向内存申请一块固定大小的内存空间,并令该指针元素指向新申请的内存空间,然后执行A4;否则,判断当前指针元素所指向的内存空间是否已满,如果是,则设置当前指针元素为指针数组的下一个指针元素,然后返回本步骤;否则,执行步骤A4;
A4:在当前指针元素指向的内存空间中添加所要添加的分类数据信息。
基于本发明所述的数据存储方法,本发明还给出了一种数据查询方法,所述数据经过至少一次分类后得到的分类数据保存在计算机的内存空间中;采用二叉结构目录树存储所述数据经过至少一次分离后得到的分类数据的各级分类目录,所述目录树上的每个节点占用固定大小的内存空间,且至少包括该节点所对应分类目录的节点标识、孩子节点指针、兄弟节点指针以及数据指针;预先在内存中生成一个映射表,并在建立每个节点的同时在预先生成的映射表中保存所述节点的节点标识与指向该节点所在内存空间的指针之间的映射关系;包括:
a、根据所述映射表在所述目录树中找到所要查询的分类目录所对应的节点;
b、判断该节点的孩子节点指针是否为空,如果是,则将该节点加入到一个容器中,然后执行步骤d;否则,执行步骤c;
c、通过递归算法读出该节点整个左树枝所包含所有叶子节点,并将读出的所有叶子节点依次加入到一个容器中,然后执行步骤d;
d、从所述容器中依次读出叶子节点,根据所读出叶子节点数据指针指向的内存空间,获取所述内存空间中存储的所有分类数据,返回给用户。
本发明在建立每个节点时,令每个节点的节点标识为该节点所对应分类目录的分类标识;
步骤a所述根据映射表在所述目录树中找到所述所要查询的分类目录所对应的节点包括:
a1、根据所要查询的分类目录的分类标识在所述映射表中找到指向其对应的节点所在内存空间的指针;
a2、通过所述该指针直接定位到所述所要查询、浏览的分类目录所对应的节点。
由此可以看出,使用二叉目录树代替现有的多叉目录树存储分类信息可以获得以下有益效果:
首先,由于二叉目录树每个节点的大小是固定的,并且占用的空间很小,因此,使用二叉目录树存储分类信息可以大大节约内存资源,使内存可以存储更多的分类数据,提高的内存的存储效率。
另外,由于二叉树的生成以及节点的移动、增加、删除操作算法简单、开销小,并且在某个节点被移动、增加或删除的过程中,不需要考虑其父节点存储空间的分配以及回收等问题,使得使用二叉目录树对分类数据进行管理简单易行。
附图说明
图1为采用现有多叉树结构目录树存储的商品目录示意图;
图2为本发明优选实施例所采用目录树中每个节点的结构示意图;
图3为本发明优选实施例所述基于目录树的分类数据存储方法流程图;
图4为采用本发明优选实施例所述目录树存储的商品目录示意图;
图5为在本发明优选实施例所述二叉目录树中查询、浏览某个分类目录所包含的分类数据的方法流程图;
图6为在本发明优选实施例所述二叉目录树的某个分类目录中添加分类数据的方法流程图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
考虑到二叉树是一种被广泛用于数据查找的数据结构,其生成以及节点搜索等算法比较成熟,且收敛速度快,因此本发明的核心思想在于利用二叉树结构存储分类数据。
本发明的一个优选实施例给出了用于存储分类数据的二叉树结构目录树(简称二叉目录树)中每个节点的结构,如图2所示,每个节点包含用于标识该节点所对应分类目录的节点标识(ID),一个指向该节点下一级子节点的孩子节点指针,一个指向该节点同级节点中另一个节点的兄弟节点指针以及一个指向用于保存分类数据内存空间的数据指针。
本发明一个优选实施例所述使用上述二叉目录树存储分类数据的方法如图3所示,主要包括以下步骤:
A:建立根节点,即在内存中开辟一块空间存储该根节点的节点ID、其孩子节点指针、兄弟节点指针以及数据指针,设置该根节点的节点ID为0,令其兄弟节点指针为空(NULL),数据指针也为NULL。
B:建立一个新的节点,令所述根节点的孩子节点指针指向本步骤所建立的新节点,并令所述新节点的节点ID为一个一级分类目录的分类标识。
在这里所述的分类标识是预先确定的、可以唯一标识分类数据每个分类目录的标识,例如,在本实施例中,前面描述过的商品目录中一级分类目录电脑的分类标识为1,珠宝首饰的分类标识为2,手机的分类标识为3;二级分类目录笔记本的分类标识为11,台式机的分类标识为12;三级分类目录IBM的分类标识为111,DELL的分类标识为112等等。这样,通过将当前节点的ID设置为某个分类目录的分类标识,就可以将当前节点与一个分类目录对应起来了。需要说明的是,在本发明中每个分类目录的标识可以采用任何形式,只要能够唯一标识各个分类目录即可,而不限于上述优选实施例给出的形式。在本步骤中,设置所述新节点的节点ID为一个一级分类目录的分类标识实质上是将所述新节点与一个一级分类目录对应起来。
本步骤所述建立新节点与步骤A所述建立根节点的方法相同,即在内存中开辟一块空间存储该节点的节点ID、孩子节点指针、兄弟节点指针以及数据指针。
在后续的步骤中,将通过递归算法创建用于存储所述分类数据的二叉目录树,具体包括:
C:令所述新节点为当前节点,判断当前节点所对应的分类目录是否具有下一级分类目录,如果有,则执行步骤D;否则,执行步骤E。
D:设置当前节点的数据指针为NULL,再建立一个新的节点,令当前节点的孩子节点指针指向在本步骤建立的新节点,并设置所述新节点的节点ID为当前节点所对应分类目录的下一级分类目录中一个分类目录的分类标识,即将所述新节点对应于当前节点所对应分类目录的一个下一级分类目录,然后返回步骤C。
在该步骤中,若所述当前节点对应于一个n级分类目录,则所述新节点的节点ID将为该n级分类目录所包含的一个n+1级分类目录的分类标识,例如当前节点对应二级分类目录笔记本,则所述新节点的节点ID就可以为三级分类目录IBM的分类标识111或三级分类目录DELL的分类标识112。
E:设置当前节点的孩子节点指针为NULL,并将当前节点的数据指针指向用于保存当前节点对应分类目录所包含的分类数据的内存空间,然后执行步骤F。
本步骤所述的用于保存当前节点对应分类目录所包含的分类数据的内存空间可以是大小任意并可以动态扩展的内存空间。
在本发明的另一个优选实施例中,为了方便进行内存资源管理,在该步骤中可以进一步设置一个指针数组,并将当前节点的数据指针指向该指针数组,其中,该指针数据的每个指针元素将分别指向固定大小的内存空间,所述固定大小的内存空间将用于记录各个叶子节点所对应的分类目录所包含的分类数据。所述指针数组所包含指针元素的个数n可以根据分类数据的多少预先设定,比如设定为10个,这样每个叶子节点就可以具有10个固定大小的内存空间。但并不是在每个叶子节点创建的时候就统一为该叶子节点申请n块内存空间,而是按需分配的,当一个内存空间存满的时候,才会申请下一个内存空间,并且每次申请仅分配一块内存空间。上述采用固定大小内存空间以及按需分配的方法主要是为了提高内存分配效率,有效地避免采用大小任意的内存空间存储分类数据时所需要的对内存空间的动态扩展操作。
F:判断当前节点所对应分类目录的所有同级目录中是否具有未加入到该二叉目录树中的,如果有,则执行步骤G;否则,执行步骤H。
G:建立一个新的节点,令当前节点的兄弟节点指针指向本步骤所建立的新节点,并设置所述新节点的节点ID为当前节点所对应分类目录的一个未加入该二叉目录树中的同级目录的分类标识,即将所述新节点对应于当前节点所对应分类目录的一个同级分类目录,然后返回步骤C。
在该步骤中,若所述当前节点对应于一个n级分类目录,则所述新节点的节点ID将为未加入所述二叉目录树的另一个n级分类目录的分类标识,例如当前节点对应二级分类目录笔记本,则所述新节点的节点ID就可以为未加入该二叉目录树的二级分类目录台式机的分类标识12或二级分类目录办公设备的分类标识13。
H:返回到当前节点所对应分类目录上一级分类目录对应的节点,并判断该节点是否为根节点,如果是,则结束;否则,执行步骤I。
I:令该节点为当前节点,并返回步骤F。
通过执行上述步骤A~I,用于存储分类数据的二叉目录树已经建立完成,并且所述二叉目录树的所有节点将与所述分类数据的所有分类目录一一对映。图4显示了采用上述二叉目录树存储的商品目录示意图。如图4所示,根节点的孩子节点指针将指向各种商品数据经过一次分类后得到一个一级分类目录,例如电脑目录对应的一级子节点。该一级子节点的孩子节点指针将指向该一级分类目录经过二次分类得到的一个二级分类目录例如笔记本目录对应的二级子节点;而其兄弟节点指针将指向另一个一级分类目录,例如珠宝首饰目录对应的一级子节点,如此类推。上述二叉目录树中的叶子节点,例如对应IBM或DELL等分类目录的节点的数据指针将指向一个指针数组,所述指针数组的指针元素将指向存储各个分类目录所包含商品信息的内存空间,即物理内存块。
下面将结合图5详细描述在上述二叉目录树中查询某个分类目录所包含的分类数据的方法,如图5所示,该方法主要包括以下步骤:
a1、根据所要查询或浏览的分类目录的分类标识在二叉目录树中找到所述该分类目录所对应的节点;
由于每个节点的节点ID就是该节点所对应分类目录的分类标识,本步骤所述查找对应节点的方法可以是将该分类目录的ID作为索引遍历所述二叉目录树,找到所述分类目录对应的节点;
a2、判断该节点的孩子节点指针是否为NULL,如果是,则执行a3;否则执行步骤a4;
a3、将该节点加入到一个容器中,然后执行步骤a5;
本步骤所述的容器是一块用于暂时存放叶子节点的临时内存空间;
a4、通过递归算法读出该节点整个左树枝所包含所有叶子节点,并将读出的所有叶子节点依次加入到一个容器中,然后执行步骤a5;
a5、从所述容器中依次读出叶子节点,根据所读出叶子节点数据指针指向的内存空间,获取所述内存空间中存储的所有分类数据,返回给用户。
若上述二叉目录树的叶子节点的数据指针指向的是一个指针数组,在步骤a5还需要进一步通过该指针数组找到存储分类数据的内存空间。
接下来将详细描述在上述二叉目录树中添加分类数据的方法,例如添加某个商品信息到一个分类目录的方法。
若上述二叉目录树的叶子节点的数据指针指向的是大小任意并可以动态扩展的内存空间,则首先根据所要添加到的分类目录的分类标识找到所述该分类目录所在的节点;然后将需要添加的分类数据添加到该节点数据指针所指向的内存空间中。若该内存空间已满,还需要首先通过内存动态扩展操作扩展该节点数据指针所指向的内存空间。
若上述二叉目录树的叶子节点的数据指针指向的是一个指针数组,则需要执行以下步骤,如图6所示:
b1:根据要将分类数据添加到的分类目录的分类标识在二叉目录树中找到所述该分类目录所在的节点;
本步骤所采用的方法与步骤a1所述的方法相同;
b2:设置该节点数据指针所指向的指针数组的第一个指针元素为当前的指针元素;
b3:判断当前指针元素所指向的内存空间是否为NULL,如果是,则执行步骤b4;否则,执行步骤b6;
b4:向内存申请一块固定大小的内存空间,并令该指针元素指向新申请的内存空间,然后执行步骤b5;
b5:在当前指针元素所指向的内存空间中添加所要添加的分类数据信息,然后结束;
b6:判断当前指针元素所指向的内存空间是否已满,如果是,则执行步骤b7;否则,执行步骤b5;
b7:设置当前指针元素为指针数组的下一个指针元素,然后返回步骤b3。
在该步骤中,若当前指针元素为指针数组的最后一个指针元素,并且其指向的内存空间已满,则无法在当前的目录树中添加相应的分类数据,应当返回错误信息给用户。
从上述优选实施例可以看出,由于二叉目录树每个节点的大小是固定的,并且占用的空间很小,因此,使用二叉目录树代替多叉目录树存储分类信息可以大大节约内存资源,从而可以存储更多的分类数据,并获得较高的存储效率。另外,由于二叉树的生成以及节点的移动、增加、删除操作算法简单、开销小,并且在某个节点被移动、增加或删除的过程中,仅需要修改其父节点的指针指向,而不需要考虑其父节点存储空间的分配以及回收等问题,使得使用二叉目录树对分类数据进行管理简单易行,可以在系统正常运行的环境下指向分类目录的变更操作,而不需要停机。
经过测试,在实际的应用中,假如有1000万件商品,共有2000个最小的分类目录,应用上述二叉目录树的方法,系统可能存在的节点,包括叶子节点和非叶子节点一共为3000个,每个节点占用的空间约为16字节(其中节点ID、孩子节点指针、兄弟节点指针以及数据指针各需4字节),并且每件商品在仅存储商品标识的情况下仅需要4字节的存储空间,那么所有的节点以及商品所需要的总的内存空间约为3000×16+10,000,000×4=40.048兆字节。完全可以全部存放在计算机内存空间中,从而可以极大地提高数据的检索效率。
在上述二叉目录树中查询、浏览某个分类目录所包含的分类数据的方法以及在二叉目录树中添加分类数据的方法中,均需要首先根据分类目录的分类标识通过遍历二叉目录树的方法找到所述该分类目录所在的节点,这种遍历操作将耗费较多的时间。
为了方便查找各个分类目录,本发明的又一个优选实施例预先在内存中生成一个分类目录对应节点的节点ID与指向该节点所在物理内存块指针的映射表,并在执行上述步骤A~I生成所述二叉目录树的过程中,在步骤C进一步执行如下操作:在预先生成的映射表中保存步骤C所述当前节点的节点ID与指向当前节点所在内存空间的指针之间的映射关系。
这样,由于每个节点的节点ID就是该节点所对应分类目录的分类标识,因此,在上述二叉目录树中查询、浏览某个分类目录所包含的分类数据的方法以及在二叉目录树中添加分类数据的方法中可以首先直接根据要将分类数据添加到的分类目录的分类标识,在所述分类目录对应节点的节点ID与指向该节点所在物理内存块指针的映射表中找到指向该分类目录对应的节点所在内存空间的指针,然后通过所述指针直接定位到所述分类目录对应的节点,而无需进行二叉目录树的遍历。例如,现在有1000万件商品,分布在1000个叶子下面,这样,平均每个叶子节点下有1万件商品。如果用户需要浏览某个分类目录,这个分类目录下包含了20万件商品,通过预先保存的节点ID与指向该节点所在内存空间的指针之间的映射关系可以直接定位到该分类目录对应的节点,因此,系统需要检索的商品总数只有20W,而不需要从整个1000万件商品中过滤,并且,用户每选择查找下一级的分类目录,所需要检索的商品总数都会快速减少,从而大大地提高了节点的查找效率,进一步提高了分类数据的管理效率。

Claims (8)

1.一种数据存储方法,其特征在于,包括:
对所述数据进行至少一次分类,得到分类数据和所述分类数据的各级分类目录,将所述分类数据存储到计算机的内存空间中;
采用二叉结构目录树存储所述分类数据的各级分类目录,用固定大小的内存空间存储所述目录树上的每个节点,所述每个节点至少包括该节点所对应分类目录的节点标识、孩子节点指针、兄弟节点指针以及数据指针;
A、建立所述目录树的根节点,令该根节点的兄弟节点指针为空,数据指针为空,并建立一个新的节点,令所述根节点的孩子节点指针指向所建立的新节点,将所述新节点对应于所述分类数据的一个一级分类目录;
B、利用递归算法分别建立与所述分类数据的各级分类目录一一对应的节点,对于每个节点,若该节点所对应的分类目录包含下一级的分类目录,则令该节点的孩子节点指针指向一个对应于本节点所对应分类目录下一级分类目录的节点,并令该节点数据指针为空,否则,令该节点孩子节点指针为空,并令该节点数据指针指向用于保存本节点所对应的分类目录所包含的分类数据的内存空间;若所述目录树中已包含对应于该节点所对应分类目录同级分类目录的所有节点,则令该节点的兄弟节点指针为空,否则,令该节点的兄弟节点指针指向一个对应于本节点所对应分类目录的同级目录且未包含在所述目录树中的节点;
预先在内存中生成一个映射表,并在建立每个节点的同时在预先生成的映射表中保存所述节点的节点标识与指向该节点所在内存空间的指针之间的映射关系。
2.如权利要求1所述的方法,其特征在于,步骤B所述利用递归算法在所述目录树中建立与所述分类数据的所有分类目录一一对应的所有节点包括以下步骤:
C、令新建立的节点为当前节点,并判断当前节点所对应的分类目录是否具有下一级分类目录,如果有,则设置当前节点的数据指针为空,再建立一个新的节点,令当前节点的孩子节点指针指向在本步骤建立的新节点,并将所述新节点对应于当前节点所对应分类目录的一个下一级分类目录,然后返回本步骤C;否则,令当前节点的孩子节点指针为空,并将当前节点的数据指针指向用于保存当前节点对应分类目录所包含的分类数据的内存空间,然后执行步骤D;
D:判断当前节点所对应的分类目录是否具有未加入到该目录树中的同级分类目录,如果有,则建立一个新的节点,令当前节点的兄弟节点指针指向本步骤所建立的新节点,并将所述新节点对应于当前节点所对应分类目录的一个未加入到该目录树中的同级分类目录,然后返回步骤C;否则,返回到当前节点所对应分类目录的上一级分类目录所对应的节点,并判断该节点是否为根节点,如果是,则结束;否则,令该节点为当前节点,并返回本步骤D。
3.如权利要求1或2所述的方法,其特征在于,所述令节点的数据指针指向用于保存本节点对应分类目录所包含的分类数据的内存空间为:令节点的数据指针指向一个指针数组,所述指针数据的每个指针元素将分别指向固定大小的内存空间,所述固定大小的内存空间将用于记录本节点所对应的分类目录所包含的分类数据。
4.如权利要求3所述的方法,其特征在于,所述方法进一步包括添加分类数据到某个分类目录,具体为:
A1:根据所要添加到的分类目录在所述目录树中找到对应该分类目录的节点;
A2:设置该节点数据指针所指向的指针数组的第一个指针元素为当前的指针元素;
A3:判断当前指针元素所指向的内存空间是否为空,如果是,则向内存申请一块固定大小的内存空间,并令该指针元素指向新申请的内存空间,然后执行A4;否则,判断当前指针元素所指向的内存空间是否已满,如果是,则设置当前指针元素为指针数组的下一个指针元素,然后返回本步骤;否则,执行步骤A4;
A4:在当前指针元素指向的内存空间中添加所要添加的分类数据信息。
5.如权利要求4所述的方法,其特征在于,在建立每个节点时,令每个节点的节点标识为该节点所对应分类目录的分类标识;
步骤A1所述根据所要添加到的分类目录找到所述该分类目录所在的节点包括:
根据所要添加的分类目录的分类标识在所述映射表中找到指向其对应的节点所在内存空间的指针;
通过所述该指针直接定位到所述所要添加到的分类目录对应的节点。
6.一种数据查询方法,其特征在于,所述数据经过至少一次分类后得到的分类数据保存在计算机的内存空间中;采用二叉结构目录树存储所述数据经过至少一次分离后得到的分类数据的各级分类目录,所述目录树上的每个节点占用固定大小的内存空间,且至少包括该节点所对应分类目录的节点标识、孩子节点指针、兄弟节点指针以及数据指针;预先在内存中生成一个映射表,并在建立每个节点的同时在预先生成的映射表中保存所述节点的节点标识与指向该节点所在内存空间的指针之间的映射关系;包括:
a、根据所述映射表在所述目录树中找到所要查询的分类目录所对应的节点;
b、判断该节点的孩子节点指针是否为空,如果是,则将该节点加入到一个容器中,然后执行步骤d;否则,执行步骤c;
c、通过递归算法读出该节点整个左树枝所包含所有叶子节点,并将读出的所有叶子节点依次加入到一个容器中,然后执行步骤d;
d、从所述容器中依次读出叶子节点,根据所读出叶子节点数据指针指向的内存空间,获取所述内存空间中存储的所有分类数据,作为查询结果返回给用户。
7.如权利要求6所述的方法,其特征在于,在建立每个节点时,令每个节点的节点标识为该节点所对应分类目录的分类标识;
步骤a所述根据映射表在所述目录树中找到所述所要查询的分类目录所对应的节点包括:
a1、根据所要查询的分类目录的分类标识在所述映射表中找到指向其对应的节点所在内存空间的指针;
a2、通过所述该指针直接定位到所述所要查询、浏览的分类目录所对应的节点。
8.如权利要求6所述的方法,其特征在于,所述的容器为用于暂时存放叶子节点的临时内存空间。
CNB2005101166630A 2005-10-26 2005-10-26 一种数据存储及查询方法 Active CN100468402C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2005101166630A CN100468402C (zh) 2005-10-26 2005-10-26 一种数据存储及查询方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2005101166630A CN100468402C (zh) 2005-10-26 2005-10-26 一种数据存储及查询方法

Publications (2)

Publication Number Publication Date
CN1955958A CN1955958A (zh) 2007-05-02
CN100468402C true CN100468402C (zh) 2009-03-11

Family

ID=38063287

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005101166630A Active CN100468402C (zh) 2005-10-26 2005-10-26 一种数据存储及查询方法

Country Status (1)

Country Link
CN (1) CN100468402C (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013097115A1 (zh) * 2011-12-28 2013-07-04 华为技术有限公司 文件目录存储方法、检索方法和设备
CN110019223A (zh) * 2017-12-21 2019-07-16 天津数观科技有限公司 一种基于数据存储模型的生成数据族谱的方法

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101726312B (zh) * 2008-10-15 2012-09-19 高德信息技术有限公司 兴趣点检索方法及装置
CN101388842B (zh) * 2008-10-30 2012-04-04 华为技术有限公司 一种存储方法和装置
CN102024019B (zh) * 2010-11-04 2013-03-13 曙光信息产业(北京)有限公司 一种分布式文件系统中基于后缀树的目录组织方法
CN102439598A (zh) * 2011-09-15 2012-05-02 华为技术有限公司 一种文档模板管理方法和系统
CN102768669A (zh) * 2012-04-27 2012-11-07 新奥特(北京)视频技术有限公司 一种实现视频资料分类的方法
CN102902734A (zh) * 2012-09-12 2013-01-30 北京伸得纬科技有限公司 一种目录存储和映射方法及系统
CN103020206A (zh) * 2012-12-05 2013-04-03 北京海量融通软件技术有限公司 基于知识网络的搜索结果聚焦系统及聚焦方法
CN104424251B (zh) 2013-08-28 2019-03-15 腾讯科技(深圳)有限公司 一种多维度拆分的计算方法以及系统
CN104572746B (zh) * 2013-10-24 2018-03-20 世纪禾光科技发展(北京)有限公司 一种矩阵式信息发布及访问方法和系统
CN106559278B (zh) * 2015-09-25 2020-09-15 中兴通讯股份有限公司 数据处理状态监控方法和装置
CN105528461A (zh) * 2016-01-12 2016-04-27 北京中交兴路车联网科技有限公司 基于隶属关系的数据系统及方法
CN105808770A (zh) * 2016-03-22 2016-07-27 北京北方微电子基地设备工艺研究中心有限责任公司 文件管理的方法及装置
CN106934033A (zh) * 2017-03-14 2017-07-07 广东工业大学 一种弯板机器人数据索引方法及装置
CN107341207B (zh) * 2017-06-23 2020-03-17 深圳市盛路物联通讯技术有限公司 一种节点信息管理方法及装置
CN107402977A (zh) * 2017-07-03 2017-11-28 天脉聚源(北京)传媒科技有限公司 建立视频资源分类树的方法和装置
CN108549676B (zh) * 2018-03-30 2020-02-18 广州供电局有限公司 电力数据的显示方法、装置、计算机设备和存储介质
CN109710542B (zh) * 2018-12-28 2021-03-16 北京像素软件科技股份有限公司 一种满n叉树构建方法及装置
CN111339042B (zh) * 2020-03-26 2024-03-01 北京快映互娱传媒有限公司 数据的操作处理方法、系统及调度服务器
CN114328797B (zh) * 2021-11-09 2024-03-19 腾讯科技(深圳)有限公司 内容搜索方法、装置、电子设备、存储介质及程序产品

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
数据结构. 严蔚敏,吴伟民,135-138,清华大学出版社. 2002
数据结构. 严蔚敏,吴伟民,135-138,清华大学出版社. 2002 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013097115A1 (zh) * 2011-12-28 2013-07-04 华为技术有限公司 文件目录存储方法、检索方法和设备
CN110019223A (zh) * 2017-12-21 2019-07-16 天津数观科技有限公司 一种基于数据存储模型的生成数据族谱的方法

Also Published As

Publication number Publication date
CN1955958A (zh) 2007-05-02

Similar Documents

Publication Publication Date Title
CN100468402C (zh) 一种数据存储及查询方法
US11573941B2 (en) Systems, methods, and data structures for high-speed searching or filtering of large datasets
CN101719141B (zh) 基于目录对象的文件处理方法和系统
US10162855B2 (en) Systems and methods for optimizing data analysis
CN102467521B (zh) 一种易扩展的多级分类检索方法及系统
CN106970958B (zh) 一种流文件的查询与存储方法和装置
CN102332030A (zh) 用于分布式键-值存储系统的数据存储、管理和查询方法及系统
CN101986649B (zh) 应用于电信行业计费系统的共享数据中心
CN109284273B (zh) 一种采用后缀数组索引的海量小文件查询方法及系统
EP3767486B1 (en) Multi-record index structure for key-value stores
CN101963993B (zh) 一种数据库单表记录快速查找的方法
CN105468785A (zh) 一种计算机文件管理方法
CN102024019A (zh) 一种分布式文件系统中基于后缀树的目录组织方法
CN108984626B (zh) 一种数据处理方法、装置及服务器
CN103473324A (zh) 基于非结构化数据存储的多维业务属性检索装置及方法
CN113297171A (zh) 数据库迁移方法及装置、数据库集群
CN109726295A (zh) 品牌知识图谱显示方法、装置、图服务器及存储介质
CN103279489A (zh) 一种元数据的存储方法、装置
CN107273443B (zh) 一种基于大数据模型元数据的混合索引方法
CN111008198A (zh) 业务数据获取方法、装置、存储介质、电子设备
CN108197321B (zh) 文件存储方法及系统
CN104834664A (zh) 面向光盘库的全文检索系统
TW448386B (en) Method and apparatus for managing electronic data with variable length
CN104133890B (zh) 一种云端大数据处理方法和系统
CN117785889B (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
ASS Succession or assignment of patent right

Owner name: BEIJING JINGDONG SHANGKE INFORMATION TECHNOLOGY CO

Free format text: FORMER OWNER: TENGXUN SCI-TECH (SHENZHEN) CO., LTD.

Effective date: 20140425

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 518044 SHENZHEN, GUANGDONG PROVINCE TO: 100080 HAIDIAN, BEIJING

TR01 Transfer of patent right

Effective date of registration: 20140425

Address after: 100080 Beijing, Suzhou Street, No. 20, building 2, floor 2,

Patentee after: Beijing Jingdong Shangke Information Technology Co., Ltd.

Address before: Shenzhen Futian District City, Guangdong province 518044 Zhenxing Road, SEG Science Park 2 East Room 403

Patentee before: Tencent Technology (Shenzhen) Co., Ltd.