CN104850591B - 一种数据的转换存储方法及装置 - Google Patents
一种数据的转换存储方法及装置 Download PDFInfo
- Publication number
- CN104850591B CN104850591B CN201510202669.3A CN201510202669A CN104850591B CN 104850591 B CN104850591 B CN 104850591B CN 201510202669 A CN201510202669 A CN 201510202669A CN 104850591 B CN104850591 B CN 104850591B
- Authority
- CN
- China
- Prior art keywords
- node
- nodename
- column
- pathname
- path
- 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
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/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种数据的转换存储方法,其中的方法包括:遍历树状结构中的每个节点,确定根节点、路径名称和节点名称;将根节点连接的至少一个节点的路径名称作为至少一个列标题,以及将每个节点的节点名称作为所述列标题对应的内容。本发明可以将树状结构数据建模为每项只包括单一数据的表格并存储,不仅占用的存储空间较小,而且可利用已有的表格分析方法来对树状结构数据进行分析,有助于将树状结构数据的分析自动化及更易进行并行处理。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种数据的转换存储方法及装置。
背景技术
目前计算机中的数据多采用树状结构进行存储,但由于其节点任意嵌套,嵌套后的层次较复杂,导致了数据存储占用空间大且各节点层次不清楚的问题。
发明内容
本发明解决的技术问题之一是嵌套后的树状结构数据在存储时占用较大空间且节点层次不清楚。
根据本发明一方面的一个实施例,提供了一种数据的转换存储方法,包括:
遍历树状结构中的每个节点,确定根节点、路径名称和节点名称;
将根节点连接的至少一个节点的路径名称作为至少一个列标题,以及将每个节点的节点名称作为所述列标题对应的内容。
根据本发明另一方面的一个实施例,提供了一种数据的转换存储装置,包括:
用于遍历树状结构中的每个节点,确定根节点、路径名称和节点名称的装置;
用于将根节点连接的至少一个节点的路径名称作为至少一个列标题,以及将每个节点的节点名称作为所述列标题对应的内容的装置。
由于本实施例可以将树状结构数据建模为每项只包括单一数据的表格并存储,不仅占用的存储空间较小,而且可利用已有的表格分析方法来对树状结构数据进行分析,有助于将树状结构数据的分析自动化及更易进行并行处理。
本领域普通技术人员将了解,虽然下面的详细说明将参考图示实施例、附图进行,但本发明并不仅限于这些实施例。而是,本发明的范围是广泛的,且意在仅通过后附的权利要求限定本发明的范围。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1示出了根据本发明一个实施例的种数据的转换存储方法的流程图。
图2示出了根据本发明一树形结构的示例图。
图3示出了根据本发明一多行多列的树形结构的示例图。
图4示出了根据本发明一多行多列的树形结构转换为单颗树的示例图。
图5示出了根据本发明一只包含数据节点的树形结构的示例图。
图6示出了根据本发明一包含字典的树形结构的示例图。
图7示出了根据本发明一包含数组的树形结构的示例图。
图8示出了根据本发明一包含数组与字典嵌套的树形结构的示例图。
图9示出了根据本发明一个实施例的种数据的转换存储装置的框图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
在上下文中所称“计算机设备”,也称为“电脑”,是指可以通过运行预定程序或指令来执行数值计算和/或逻辑计算等预定处理过程的智能电子设备,其可以包括处理器与存储器,由处理器执行在存储器中预存的存续指令来执行预定处理过程,或是由ASIC、FPGA、DSP等硬件执行预定处理过程,或是由上述二者组合来实现。计算机设备包括但不限于服务器、个人电脑、笔记本电脑、平板电脑、智能手机等。
所述计算机设备包括用户设备与网络设备。其中,所述用户设备包括但不限于电脑、智能手机、PDA等;所述网络设备包括但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(Cloud Computing)的由大量计算机或网络服务器构成的云,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。其中,所述计算机设备可单独运行来实现本发明,也可接入网络并通过与网络中的其他计算机设备的交互操作来实现本发明。其中,所述计算机设备所处的网络包括但不限于互联网、广域网、城域网、局域网、VPN网络等。
需要说明的是,所述用户设备、网络设备和网络等仅为举例,其他现有的或今后可能出现的计算机设备或网络如可适用于本发明,也应包含在本发明保护范围以内,并以引用方式包含于此。
后面所讨论的方法(其中一些通过流程图示出)可以通过硬件、软件、固件、中间件、微代码、硬件描述语言或者其任意组合来实施。当用软件、固件、中间件或微代码来实施时,用以实施必要任务的程序代码或代码段可以被存储在机器或计算机可读介质(比如存储介质)中。(一个或多个)处理器可以实施必要的任务。
这里所公开的具体结构和功能细节仅仅是代表性的,并且是用于描述本发明的示例性实施例的目的。但是本发明可以通过许多替换形式来具体实现,并且不应当被解释成仅仅受限于这里所阐述的实施例。
应当理解的是,虽然在这里可能使用了术语“第一”、“第二”等等来描述各个单元,但是这些单元不应当受这些术语限制。使用这些术语仅仅是为了将一个单元与另一个单元进行区分。举例来说,在不背离示例性实施例的范围的情况下,第一单元可以被称为第二单元,并且类似地第二单元可以被称为第一单元。这里所使用的术语“和/或”包括其中一个或更多所列出的相关联项目的任意和所有组合。
应当理解的是,当一个单元被称为“连接”或“耦合”到另一单元时,其可以直接连接或耦合到所述另一单元,或者可以存在中间单元。与此相对,当一个单元被称为“直接连接”或“直接耦合”到另一单元时,则不存在中间单元。应当按照类似的方式来解释被用于描述单元之间的关系的其他词语(例如“处于...之间”相比于“直接处于...之间”,“与...邻近”相比于“与...直接邻近”等等)。
这里所使用的术语仅仅是为了描述具体实施例而不意图限制示例性实施例。除非上下文明确地另有所指,否则这里所使用的单数形式“一个”、“一项”还意图包括复数。还应当理解的是,这里所使用的术语“包括”和/或“包含”规定所陈述的特征、整数、步骤、操作、单元和/或组件的存在,而不排除存在或添加一个或更多其他特征、整数、步骤、操作、单元、组件和/或其组合。
还应当提到的是,在一些替换实现方式中,所提到的功能/动作可以按照不同于附图中标示的顺序发生。举例来说,取决于所涉及的功能/动作,相继示出的两幅图实际上可以基本上同时执行或者有时可以按照相反的顺序来执行。
下面结合附图对本发明作进一步详细描述。
图1是根据本发明一个实施例的检索结果的输出方法的流程图。
结合图1中所示,本实施例所述的数据的转换存储方法包括如下步骤:
S100、遍历树状结构中的每个节点,确定根节点、路径名称和节点名称;
S110、将根节点连接的至少一个节点的路径名称作为至少一个列标题,以及将每个节点的节点名称作为所述列标题对应的内容。
下面对各步骤做进一步详细介绍。
步骤S100中,计算机设备遍历树状结构中的每个节点,确定根节点、路径名称和节点名称。
其中,以树状结构存储的数据可参考如图2所示的形式,即一根节点有三个节点,而最右侧的节点又有三个子节点。而在实际应用中的树状结构数据更多的情形是有多行多列,即如图3所示的若干列的数据是树状结构。
如图2所示的树状结构可看成是如图3所示的树状结构在只有1行1列时的一种特殊情况;而反过来,假如把如图3所示的树状结构的一行看成一个节点,行中各列是该节点的子节点,所有行的集合视为根节点,则形成如图4所示的树状结构。则多行多列的数据结构也可转换为只包含一棵树的树状结构。
对任意的只包含单颗树的树状结构数据,可由计算机设备通过遍历该树状结构的每个节点的方式,将该树状结构中的根节点、路径名称和节点名称提取出来作为一个单独的数据。
在本实施例中,对树状结构数据的遍历方法包括但不限于前序遍历、中序遍历和后序遍历等,而如图4所示的树状结构数据仅为例举,本领域技术人员应理解对其它如有序树、二叉树、霍夫曼树等结构的数据,也应落入本发明的保护范围,为简明起见,仅以引用方式包含于此,而不做赘述。
步骤S110中,计算机设备将根节点连接的至少一个节点的路径名称作为至少一个列标题,以及将每个节点的节点名称作为所述列标题对应的内容
针对计算机设备在步骤S100中遍历获得的根节点、路径名称和节点名称等数据,计算机设备可通过将包含任意嵌套深度的节点均转换为单颗树的方式实现对树状结构数据的转换,而通常情况下一个树状结构中每个节点的取值包括以下三种情形:
1)简单数据,如图5所示。
2)字典,该字典中的键为文本格式,值为子节点,其中如图6所示的“导演”路径对应的节点即为字典。
3)数组,该数组中每项为子节点,其中如图7所示的“来源”路径对应的节点即为数组。
在一可选实施例中,对于如图5所示的树状结构中每个节点均为简单数据节点的情况,可按将每个节点的路径名称作为列标题、将每个节点的节点名称作为该列标题下的数据内容方式,生成如表1所示的数据结构。
表1
源行号 | 剧集名称 | 年份 | 集数 |
1 | 小雪 | 2010 | 20 |
在一可选实施例中,将每个节点的节点名称作为所述列标题对应的内容包括:
-当一树状结构中的预定节点的节点级数大于1时,计算机设备可将该节点的上级路径的路径名称和该节点的下级路径的路径名称通过第一分隔符连接,并作为列标题。
例如,如图6所述的树状结构中的存在一个节点为字典的情况,即导演路径对应的节点数量为两个,到达该两个节点的路径名称分别是“姓名”和“性别”,而该两个节点的节点内容分别是“戚健”和“男”。
由于字典从原理上讲就是子树,而字典的键是到达子树中每个子节点的路径名称。图6中的字典“导演”中的各个节点都为简单数据,因此将每条路径转换为一列。而该列的标题则是到达该字典的路径名称(导演),再加上该列数据在字典中的键的名称(姓名或性别),将该路径名称和该键的名称通过第一分隔符连接(第一分隔符可采用“.”),则生成如“导演.姓名”的列标题。
在一可选实施例中,将每个节点的节点名称作为所述列标题对应的内容包括:
-计算机设备将每个节点的节点名称分别作为一列数据的内容。
在生成如“导演.姓名”的列标题后,“姓名”路径对应的节点名称“戚健”则可作为该列数据的内容。
基于上述实施例所述的转换规则,可将如图6所示的树状结构数据生成如表1所示的数据结构。
表2
源行号 | 剧集名称 | 年份 | 导演.姓名 | 导演.性别 |
1 | 小雪 | 2010 | 戚健 | 男 |
在一可选实施例中,将根节点连接的至少一个节点的路径名称作为至少一个列标题,以及将每个节点的节点名称作为所述列标题对应的内容包括:
-若预定节点的节点名称的数量大于1,则添加与该节点名称的数量相同的行;
-将每个该节点的节点路径作为行标题且该行标题设置在具有预定列标题的列中,并将该节点的每个节点名称作为一列数据的内容。
如图7所示的树状结构数据中包括了数组,即路径名称为“主演”和“来源”的路径对应的节点中均包括三个名称。
由于数组代表了一批有序节点的集合,可以看作一个键为非负有序整数的特殊字典。图7中的“来源”和“主演”都是简单数组,由于这两个数组的元素之间并没有相关性,因此在转换时可各自独立成行,生成如表3所示的数据结构。
表3
源行号 | 子表名 | 剧集名称 | 年份 | 来源 | 主演 |
1 | 小雪 | 2010 | N/A | N/A | |
1 | 来源 | 空值 | 空值 | 优酷 | N/A |
1 | 来源 | 空值 | 空值 | PPTV | N/A |
1 | 来源 | 空值 | 空值 | 56网 | N/A |
1 | 主演 | 空值 | 空值 | N/A | 王学圻 |
1 | 主演 | 空值 | 空值 | N/A | 牛萌萌 |
1 | 主演 | 空值 | 空值 | N/A | 肖雄 |
数组的引入会使转换结果变成一个稀疏二维表,为优化存储空间,表3中内容空白的格都将置空。
为方便区分表3中的数据“空值”和“N/A”,以及按需还原出各行的“剧集名称”和“年份”,引入了“子表名”这一列。本实施例将每一个数组看做一个“子表”,子表的名称是从根节点到该数组的路径名称,不在数组中的节点的子表名为空值。
建立子表名后,就可以完整的保持源数据中的层次结构信息,以备必要时通过计算设备还原出这些信息。
在一可选实施例中,将根节点连接的至少一个节点的路径名称作为至少一个列标题还包括:
-若预定节点的路径数量和节点名称的数量均大于1,则将该节点的上级路径的路径名称和该节点的下级路径的路径名称通过第一预定分隔符连接以及将同一节点的不同节点名称之间通过第二分隔符连接,并作为列标题;
-添加与节点名称的数量相同的行,并将每个节点的节点路径作为行标题且该行标题设置在具有预定列标题的列中,并将该节点的每个节点名称作为一列数据的内容。
如图8所示的树状结构数据中既包括了字典又包括了数组,即路径名称为“来源”的路径对应的节点中包括“优酷”、“PPTV”、“56网”三个名称,其中的“PPTV”的路径“详情”又对应“分集”和“更新至”两条路径。而名称为“分集”的路径对应的节点中也包括“优酷”、“PPTV”、“56网”三个名称,每个名称下又包括“标题”和“可下载”两条路径,每条路径对应已更新的集数和可下载的集数。
基于上述原则,由于在列标题中会包括四个级数的路径,其中在两个级的路径中都分别包含了字典,并且还有两个级的路径中包含了数组,为了区分字典和数组,可分别设置第一分隔符和第二分隔符,第一分隔符可采用“.”,第二分隔符可采用“/”,则可生成如表4所示的数据结构。
表4
其中的“.”可用于分隔字典与字典的子元素,而“/”可用于分隔数组与数组的子元素。例如,列标题“来源/网址”和“来源/级数”表示路径“来源”对应的数组中的每个节点又对应了“网址”和“级数”两条路径。列标题“来源/详情.分集/标题”和“来源/详情.分集/可下载”表示路径“来源”对应的数组中的一个节点又对应了路径“详情”,且路径“详情”对应路径“分集”中的数组又分别对应“标题”和“可下载”两个节点;而“详情”对应路径“更新至”仅对应一简单数据,因此对应的列标题为“来源/详情.更新至”。
字典的任意深度的嵌套,都可通过上述规则被拉平为二维表中的一行。但每个数组,仍然通过一批专有的行来表示,这些行逻辑上组成了一个子表。子表中可以嵌套其它子表,所有子表之间形成了一个新的树状结构,称之为子表树。而子表名,则是子表树中每个节点的路径。
例如,字表名“来源”有三个行的数据,而字表名“来源/详情.分集”则是因为在“来源”路径对应的“详情”路径包括了字典,而该字典中包括了“分集”和“更新至”两条路径,其中的“分集”路径对应有数组,该数组中包括三个节点名称,因此字表名“来源/详情.分集”也包括三行数据。
因此,上述的子表名是用稀疏二维表建模树状结构数据的关键,它完整蕴含了源数据中的节点层次信息,一方面可用于区分空值和未定义值(N/A),以节省存储空间,另一方面可在必要时,完整重建出数据之间的层次关系。
对于任意复杂的树状结构数据,都可以依照步骤S110中的方法,完整转换为一个稀疏二维表进行存储。转换结果中的第一列,对应转换前数据的行号;第二列记录当前行所在的子表名;而其它列,则与原树状结构中的每一个子节点一一对应。
采用本实施例提供的技术方案,可以将树状结构数据建模为每项只包括单一数据的表格并存储,不仅占用的存储空间较小,而且可利用已有的表格分析方法来对树状结构数据进行分析,有助于将树状结构数据的分析自动化及更易进行并行处理。
图9示出根据本案发明一个实施例的数据的转换存储装置(以下简称“转换存储设备”),该转换存储设备可以是计算机设备或是计算机设备中的一个装置。结合图3中所示,该转换存储设备包括:
用于遍历树状结构中的每个节点,确定根节点、路径名称和节点名称的装置(以下简称“遍历单元”)900;
用于将根节点连接的至少一个节点的路径名称作为至少一个列标题,以及将每个节点的节点名称作为所述列标题对应的内容的装置(以下简称“转换单元”)910;
下面对各装置做进一步详细介绍。
遍历单元900用于遍历树状结构中的每个节点,确定根节点、路径名称和节点名称
其中,以树状结构存储的数据可参考如图2所示的形式,即一根节点有三个节点,而最右侧的节点又有三个子节点。而在实际应用中的树状结构数据更多的情形是有多行多列,即如图3所示的若干列的数据是树状结构。
如图2所示的树状结构可看成是如图3所示的树状结构在只有1行1列时的一种特殊情况;而反过来,假如把如图3所示的树状结构的一行看成一个节点,行中各列是该节点的子节点,所有行的集合视为根节点,则形成如图4所示的树状结构。则多行多列的数据结构也可转换为只包含一棵树的树状结构。
对任意的只包含单颗树的树状结构数据,可由遍历单元900通过遍历该树状结构的每个节点的方式,将该树状结构中的根节点、路径名称和节点名称提取出来作为一个单独的数据。
在本实施例中,对树状结构数据的遍历方法包括但不限于前序遍历、中序遍历和后序遍历等,而如图4所示的树状结构数据仅为例举,本领域技术人员应理解对其它如有序树、二叉树、霍夫曼树等结构的数据,也应落入本发明的保护范围,为简明起见,仅以引用方式包含于此,而不做赘述。
转换单元910用于将根节点连接的至少一个节点的路径名称作为至少一个列标题,以及将每个节点的节点名称作为所述列标题对应的内容。
针对遍历单元900在步骤S100中遍历获得的根节点、路径名称和节点名称等数据,转换单元910可通过将包含任意嵌套深度的节点均转换为单颗树的方式实现对树状结构数据的转换,而通常情况下一个树状结构中每个节点的取值包括以下三种情形:
1)简单数据,如图5所示。
2)字典,该字典中的键为文本格式,值为子节点,其中如图6所示的“导演”路径对应的节点即为字典。
3)数组,该数组中每项为子节点,其中如图7所示的“来源”路径对应的节点即为数组。
在一可选实施例中,对于如图5所示的树状结构中每个节点均为简单数据节点的情况,可按将每个节点的路径名称作为列标题、将每个节点的节点名称作为该列标题下的数据内容方式,生成如表1所示的数据结构。
表1
源行号 | 剧集名称 | 年份 | 集数 |
1 | 小雪 | 2010 | 20 |
在一可选实施例中,转换单元910包括:
-用于若预定节点的路径级数大于1,则将该节点的上级路径的路径名称和该节点的下级路径的路径名称通过第一分隔符连接,并作为列标题的子装置。
例如,如图6所述的树状结构中的存在一个节点为字典的情况,即导演路径对应的节点数量为两个,到达该两个节点的路径名称分别是“姓名”和“性别”,而该两个节点的节点内容分别是“戚健”和“男”。
由于字典从原理上讲就是子树,而字典的键是到达子树中每个子节点的路径名称。图6中的字典“导演”中的各个节点都为简单数据,因此将每条路径转换为一列。而该列的标题则是到达该字典的路径名称(导演),再加上该列数据在字典中的键的名称(姓名或性别),将该路径名称和该键的名称通过第一分隔符连接(第一分隔符可采用“.”),则生成如“导演.姓名”的列标题。
在一可选实施例中,转换单元910包括:
-用于将每个节点的节点名称分别作为一列数据的内容的子装置。
在生成如“导演.姓名”的列标题后,“姓名”路径对应的节点名称“戚健”则可作为该列数据的内容。
基于上述实施例所述的转换规则,可将如图6所示的树状结构数据生成如表1所示的数据结构。
表2
源行号 | 剧集名称 | 年份 | 导演.姓名 | 导演.性别 |
1 | 小雪 | 2010 | 戚健 | 男 |
在一可选实施例中,转换单元910包括:
-用于若预定节点的节点名称的数量大于1,则添加与该节点名称的数量相同的行的子装置;
-用于将每个该节点的节点路径作为行标题且该行标题设置在具有预定列标题的列中,并将该节点的每个节点名称作为一列数据的内容的子装置。
如图7所示的树状结构数据中包括了数组,即路径名称为“主演”和“来源”的路径对应的节点中均包括三个名称。
由于数组代表了一批有序节点的集合,可以看作一个键为非负有序整数的特殊字典。图7中的“来源”和“主演”都是简单数组,由于这两个数组的元素之间并没有相关性,因此在转换时可各自独立成行,生成如表3所示的数据结构。
表3
源行号 | 子表名 | 剧集名称 | 年份 | 来源 | 主演 |
1 | 小雪 | 2010 | N/A | N/A | |
1 | 来源 | 空值 | 空值 | 优酷 | N/A |
1 | 来源 | 空值 | 空值 | PPTV | N/A |
1 | 来源 | 空值 | 空值 | 56网 | N/A |
1 | 主演 | 空值 | 空值 | N/A | 王学圻 |
1 | 主演 | 空值 | 空值 | N/A | 牛萌萌 |
1 | 主演 | 空值 | 空值 | N/A | 肖雄 |
数组的引入会使转换结果变成一个稀疏二维表,为优化存储空间,表3中内容空白的格都将置空。
为方便区分表3中的数据“空值”和“N/A”,以及按需还原出各行的“剧集名称”和“年份”,引入了“子表名”这一列。本实施例将每一个数组看做一个“子表”,子表的名称是从根节点到该数组的路径名称,不在数组中的节点的子表名为空值。
建立子表名后,就可以完整的保持源数据中的层次结构信息,以备必要时通过计算设备还原出这些信息。
在一可选实施例中,转换单元910包括:
-用于若预定节点的路径数量和节点名称的数量均大于1,则将该节点的上级路径的路径名称和该节点的下级路径的路径名称通过第一预定分隔符连接以及将同一节点的不同节点名称之间通过第二分隔符连接,并作为列标题的子装置;
-用于添加与节点名称的数量相同的行,并将每个节点的节点路径作为行标题且该行标题设置在具有预定列标题的列中,并将该节点的每个节点名称作为一列数据的内容的子装置。
如图8所示的树状结构数据中既包括了字典又包括了数组,即路径名称为“来源”的路径对应的节点中包括“优酷”、“PPTV”、“56网”三个名称,其中的“PPTV”的路径“详情”又对应“分集”和“更新至”两条路径。而名称为“分集”的路径对应的节点中也包括“优酷”、“PPTV”、“56网”三个名称,每个名称下又包括“标题”和“可下载”两条路径,每条路径对应已更新的集数和可下载的集数。
基于上述原则,由于在列标题中会包括四个级数的路径,其中在两个级的路径中都分别包含了字典,并且还有两个级的路径中包含了数组,为了区分字典和数组,可分别设置第一分隔符和第二分隔符,第一分隔符可采用“.”,第二分隔符可采用“/”,则可生成如表4所示的数据结构。
表4
其中的“.”可用于分隔字典与字典的子元素,而“/”可用于分隔数组与数组的子元素。例如,列标题“来源/网址”和“来源/级数”表示路径“来源”对应的数组中的每个节点又对应了“网址”和“级数”两条路径。列标题“来源/详情.分集/标题”和“来源/详情.分集/可下载”表示路径“来源”对应的数组中的一个节点又对应了路径“详情”,且路径“详情”对应路径“分集”中的数组又分别对应“标题”和“可下载”两个节点;而“详情”对应路径“更新至”仅对应一简单数据,因此对应的列标题为“来源/详情.更新至”。
字典的任意深度的嵌套,都可通过上述规则被拉平为二维表中的一行。但每个数组,仍然通过一批专有的行来表示,这些行逻辑上组成了一个子表。子表中可以嵌套其它子表,所有子表之间形成了一个新的树状结构,称之为子表树。而子表名,则是子表树中每个节点的路径。
例如,字表名“来源”有三个行的数据,而字表名“来源/详情.分集”则是因为在“来源”路径对应的“详情”路径包括了字典,而该字典中包括了“分集”和“更新至”两条路径,其中的“分集”路径对应有数组,该数组中包括三个节点名称,因此字表名“来源/详情.分集”也包括三行数据。
因此,上述的子表名是用稀疏二维表建模树状结构数据的关键,它完整蕴含了源数据中的节点层次信息,一方面可用于区分空值和未定义值(N/A),以节省存储空间,另一方面可在必要时,完整重建出数据之间的层次关系。
对于任意复杂的树状结构数据,都可以依照步骤S110中的方法,完整转换为一个稀疏二维表进行存储。转换结果中的第一列,对应转换前数据的行号;第二列记录当前行所在的子表名;而其它列,则与原树状结构中的每一个子节点一一对应。
采用本实施例提供的技术方案,可以将树状结构数据建模为每项只包括单一数据的表格并存储,不仅占用的存储空间较小,而且可利用已有的表格分析方法来对树状结构数据进行分析,有助于将树状结构数据的分析自动化及更易进行并行处理。
需要注意的是,本发明可在软件和/或软件与硬件的组合体中被实施,例如,本发明的各个装置可采用专用集成电路(ASIC)或任何其他类似硬件设备来实现。在一个实施例中,本发明的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本发明的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本发明的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (6)
1.一种数据的转换存储方法,其中,包括:
遍历树状结构中的每个节点,确定根节点、路径名称和节点名称;
将根节点连接的至少一个节点的路径名称作为至少一个列标题,以及将每个节点的节点名称作为所述列标题对应的内容;
将根节点连接的至少一个节点的路径名称作为至少一个列标题包括:
若预定节点的路径级数大于1,则将该节点的上级路径的路径名称和该节点的下级路径的路径名称通过第一分隔符连接,并作为列标题;
若预定节点的路径数量和节点名称的数量均大于1,则将该节点的上级路径的路径名称和该节点的下级路径的路径名称通过第一预定分隔符连接以及将同一节点的不同节点名称之间通过第二分隔符连接,并作为列标题;
添加与节点名称的数量相同的行,并将每个节点的节点路径作为行标题且该行标题设置在具有预定列标题的列中,并将该节点的每个节点名称作为一列数据的内容。
2.根据权利要求1所述的方法,其中,将每个节点的节点名称作为所述列标题对应的内容包括:
将每个节点的节点名称分别作为一列数据的内容。
3.根据权利要求1或2所述的方法,其中,将根节点连接的至少一个节点的路径名称作为至少一个列标题,以及将每个节点的节点名称作为所述列标题对应的内容包括:
若预定节点的节点名称的数量大于1,则添加与该节点名称的数量相同的行;
将每个该节点的节点路径作为行标题且该行标题设置在具有预定列标题的列中,并将该节点的每个节点名称作为一列数据的内容。
4.一种数据的转换存储装置,其中,包括:
用于遍历树状结构中的每个节点,确定根节点、路径名称和节点名称的装置;
用于将根节点连接的至少一个节点的路径名称作为至少一个列标题,以及将每个节点的节点名称作为所述列标题对应的内容的装置;
在用于将根节点连接的至少一个节点的路径名称作为至少一个列标题,以及将每个节点的节点名称作为所述列标题对应的内容的装置中包括:
用于若预定节点的路径级数大于1,则将该节点的上级路径的路径名称和该节点的下级路径的路径名称通过第一分隔符连接,并作为列标题的子装置;
用于若预定节点的路径数量和节点名称的数量均大于1,则将该节点的上级路径的路径名称和该节点的下级路径的路径名称通过第一预定分隔符连接以及将同一节点的不同节点名称之间通过第二分隔符连接,并作为列标题的子装置;
用于添加与节点名称的数量相同的行,并将每个节点的节点路径作为行标题且该行标题设置在具有预定列标题的列中,并将该节点的每个节点名称作为一列数据的内容的子装置。
5.根据权利要求4所述的装置,其中,在用于将根节点连接的至少一个节点的路径名称作为至少一个列标题,以及将每个节点的节点名称作为所述列标题对应的内容的装置中还包括:
用于将每个节点的节点名称分别作为一列数据的内容的子装置。
6.根据权利要求4或5所述的装置,其中,在用于将根节点连接的至少一个节点的路径名称作为至少一个列标题,以及将每个节点的节点名称作为所述列标题对应的内容的装置中还包括:
用于若预定节点的节点名称的数量大于1,则添加与该节点名称的数量相同的行的子装置;
用于将每个该节点的节点路径作为行标题且该行标题设置在具有预定列标题的列中,并将该节点的每个节点名称作为一列数据的内容的子装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510202669.3A CN104850591B (zh) | 2015-04-24 | 2015-04-24 | 一种数据的转换存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510202669.3A CN104850591B (zh) | 2015-04-24 | 2015-04-24 | 一种数据的转换存储方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104850591A CN104850591A (zh) | 2015-08-19 |
CN104850591B true CN104850591B (zh) | 2019-03-19 |
Family
ID=53850236
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510202669.3A Active CN104850591B (zh) | 2015-04-24 | 2015-04-24 | 一种数据的转换存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104850591B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108038199A (zh) * | 2017-12-12 | 2018-05-15 | 清华大学 | 一种层次结构的传感器时序数据存储方法和系统 |
CN108647305B (zh) * | 2018-05-09 | 2021-07-20 | 天津字节跳动科技有限公司 | 文档格式转换方法和装置 |
CN110765123A (zh) * | 2018-07-09 | 2020-02-07 | 株式会社日立制作所 | 基于树形结构的材料数据的存储方法、装置和系统 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1545048A (zh) * | 2003-11-17 | 2004-11-10 | 中兴通讯股份有限公司 | 一种用二维表实现的树的存储、访问的方法 |
CN101957863A (zh) * | 2010-10-14 | 2011-01-26 | 广州从兴电子开发有限公司 | 数据并行处理方法、装置及系统 |
CN102508866A (zh) * | 2011-10-09 | 2012-06-20 | 中国电子科技集团公司第二十八研究所 | 基于数字寻址的指挥关系树结构化存储与快速处理方法 |
CN102646133A (zh) * | 2012-03-28 | 2012-08-22 | 电子科技大学 | 基于元数据存储的二维表及其组织方法 |
CN103049494A (zh) * | 2012-12-07 | 2013-04-17 | 华为技术有限公司 | 一种xml文档的表格存储方法及装置 |
CN103440301A (zh) * | 2013-08-21 | 2013-12-11 | 曙光信息产业股份有限公司 | 一种数据多副本混合存储方法及系统 |
CN103559322A (zh) * | 2013-11-22 | 2014-02-05 | 方正国际软件有限公司 | 文档格式转换方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002230038A (ja) * | 2001-02-02 | 2002-08-16 | Hitachi Ltd | データ表示方法 |
US8620963B2 (en) * | 2012-03-08 | 2013-12-31 | eBizprise Inc. | Large-scale data processing system, method, and non-transitory tangible machine-readable medium thereof |
-
2015
- 2015-04-24 CN CN201510202669.3A patent/CN104850591B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1545048A (zh) * | 2003-11-17 | 2004-11-10 | 中兴通讯股份有限公司 | 一种用二维表实现的树的存储、访问的方法 |
CN101957863A (zh) * | 2010-10-14 | 2011-01-26 | 广州从兴电子开发有限公司 | 数据并行处理方法、装置及系统 |
CN102508866A (zh) * | 2011-10-09 | 2012-06-20 | 中国电子科技集团公司第二十八研究所 | 基于数字寻址的指挥关系树结构化存储与快速处理方法 |
CN102646133A (zh) * | 2012-03-28 | 2012-08-22 | 电子科技大学 | 基于元数据存储的二维表及其组织方法 |
CN103049494A (zh) * | 2012-12-07 | 2013-04-17 | 华为技术有限公司 | 一种xml文档的表格存储方法及装置 |
CN103440301A (zh) * | 2013-08-21 | 2013-12-11 | 曙光信息产业股份有限公司 | 一种数据多副本混合存储方法及系统 |
CN103559322A (zh) * | 2013-11-22 | 2014-02-05 | 方正国际软件有限公司 | 文档格式转换方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104850591A (zh) | 2015-08-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8943068B2 (en) | Dynamic graph system for a semantic database | |
Perez et al. | Ringo: Interactive graph analytics on big-memory machines | |
CN104462163B (zh) | 一种三维模型表征方法、检索方法及检索系统 | |
CN111382276B (zh) | 一种事件发展脉络图生成方法 | |
CN110457491A (zh) | 一种基于游离状态节点的知识图谱重构方法及装置 | |
CN104866471B (zh) | 一种基于局部敏感哈希策略的实例匹配方法 | |
CN112052404B (zh) | 多源异构关系网络的群体发现方法、系统、设备及介质 | |
KR20160132942A (ko) | 키드 엔티티들의 속성 매핑 | |
Lu et al. | A small-world network derived from the deterministic uniform recursive tree | |
CN104598536B (zh) | 一种分布式网络信息结构化处理方法 | |
US20170060977A1 (en) | Data preparation for data mining | |
CN104850591B (zh) | 一种数据的转换存储方法及装置 | |
Zubiaga et al. | Content-based clustering for tag cloud visualization | |
CN110473073A (zh) | 线性加权推荐的方法及装置 | |
CN104281648A (zh) | 基于维度标签的搜索结果多维度导航方法 | |
AU2018312543B2 (en) | Systems and methods for extracting structure from large, dense, and noisy networks | |
CN105389297A (zh) | 文本相似度处理方法 | |
CN104834958B (zh) | 一种对答案的步骤进行评判的方法和装置 | |
CN105095385B (zh) | 一种检索结果的输出方法及装置 | |
CN106844533A (zh) | 一种数据分组聚集方法及装置 | |
CN115982390A (zh) | 一种产业链构建和迭代扩充开发方法 | |
CN110580144A (zh) | 一种通过给页面控件添加查询运算符实现的通用查询方法 | |
CN110334270A (zh) | 一种新闻排序方法、服务器及计算机可读存储介质 | |
Cunha et al. | Tweeprofiles: detection of spatio-temporal patterns on twitter | |
CN103678432A (zh) | 一种基于网页主体特征和中介真值的网页主体提取方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |