CN118170769A - 用于超大规模集成电路自动化设计的数据存储系统及方法 - Google Patents
用于超大规模集成电路自动化设计的数据存储系统及方法 Download PDFInfo
- Publication number
- CN118170769A CN118170769A CN202410593006.8A CN202410593006A CN118170769A CN 118170769 A CN118170769 A CN 118170769A CN 202410593006 A CN202410593006 A CN 202410593006A CN 118170769 A CN118170769 A CN 118170769A
- Authority
- CN
- China
- Prior art keywords
- data
- node
- linked list
- index
- bottom layer
- 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.)
- Granted
Links
- 238000013500 data storage Methods 0.000 title claims abstract description 59
- 238000013461 design Methods 0.000 title claims abstract description 45
- 238000000034 method Methods 0.000 title claims description 38
- 238000001514 detection method Methods 0.000 claims abstract description 21
- 230000002457 bidirectional effect Effects 0.000 claims description 21
- 238000004590 computer program Methods 0.000 claims description 11
- 238000003860 storage Methods 0.000 claims description 9
- 238000010586 diagram Methods 0.000 description 9
- 238000011161 development Methods 0.000 description 5
- 238000013144 data compression Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 238000007906 compression Methods 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- 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/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种用于超大规模集成电路自动化设计的数据存储系统,包括:接收模块、数据存储模块、创建模块,以及检测模块;所述接收模块,用于接收带有标识号的数据,所述标识号从小到大递增;所述数据存储模块,与所述接收模块相连,用于按照标识号顺序,采用RLE编码优化数据并将数据存储到数据库的底层双向链表中;所述创建模块,用于设置所述底层双向链表的节点阈值,在所述底层双向链表的节点数量超过所述阈值时,创建多层跳表索引;所述检测模块,用于检测底层双向链表中的节点数量是否超过所述阈值,以及比较待添加数据的标识号与当前底层双向链表中已添加数据的最大标识号。本发明能够有效地解决存储大量重复数据的问题,同时保证高效的访问性能。
Description
技术领域
本发明涉及超大规模集成电路自动化设计技术领域,尤其涉及一种用于超大规模集成电路自动化设计的数据存储系统及方法。
背景技术
近年来,半导体行业的迅速发展,电子设计自动化(Electronic DesignAutomation,简称EDA)在芯片的设计、开发和生产过程中起着至关重要的作用。EDA技术通过自动化和优化设计流程,大大减少了芯片的迭代时间,缩短了产品上市时间,与此同时,芯片中嵌入的晶体管数量也在指数式增长,因此对EDA工具储存和处理数据的要求也在不断提高。由于芯片层次化设计的缘故,EDA工具开发过程中会存储大量重复的数据,例如海量的引脚(pin)对应的信号线(net)有可能都是同一条,如果一一对应存储的话会造成不必要的空间浪费。
为了高效的处理和存储这些海量数据,目前主要的做法是使用动态数组存储数据,并且在必要时使用数据压缩技术。然而主流的压缩算法主要是针对于文件的压缩与解压缩,如果要对程序执行过程中的对象进行压缩与解压缩,还需涉及数据的序列化与反序列化。这些方式并不能有效解决重复数据造成的空间浪费,过度的数据压缩还会造成更多额外的开销,造成程序性能的下降。
发明内容
为了解决现有技术的缺陷,本发明的目的在于提供一种用于超大规模集成电路自动化设计的数据存储系统,基于RLE编码和跳表实现数据存储和访问,将连续重复数据描述为数据与重复次数,适用于数据序列中存在大量连续重复数据的情况,尤其是EDA工具开发中,能够有效地解决存储大量重复数据的问题,同时保证高效的访问性能。
为实现上述目的,本发明提供的用于超大规模集成电路自动化设计的数据存储系统,包括:接收模块、数据存储模块、创建模块,以及检测模块;
所述接收模块,用于接收带有标识号的数据,所述标识号从小到大递增;
所述数据存储模块,与所述接收模块相连,用于按照标识号顺序,采用RLE编码优化数据并将数据存储到数据库的底层双向链表中;
所述创建模块,用于设置所述底层双向链表的节点阈值,在所述底层双向链表的节点数量超过所述阈值时,创建多层跳表索引;
所述检测模块,用于检测底层双向链表中的节点数量是否超过所述阈值,以及比较待添加数据的标识号与当前底层双向链表中已添加数据的最大标识号。
进一步地,所述底层双向链表,其节点包括数据和数据的重复数量。
进一步地,所述底层双向链表设有全局的游标和当前底层双向链表已添加数据的标识号的最大值;所述游标指向底层双向链表中上次访问的节点并记录其标识号的值;所述标识号的最大值对应底层双向链表的尾部节点。
进一步地,所述创建模块,在所述检测模块判断待添加数据的标识号大于当前底层双向链表中已添加数据的最大标识号时,将两个标识号之间的数据填充为默认值,之后判断所述待添加数据与当前底层双向链表尾部节点的数据是否相同,如不相同则构建新节点并初始化新节点的数据和数据的重复数量,否则修改尾部节点数据的重复数量。
进一步地,所述创建模块,当所述检测模块检测到底层双向链表的节点数量超过阈值时,在底层双向链表中每两个节点生成一个索引节点,建立一层索引,然后用同样的方式通过一层索引节点来创建二层索引,以此类推,直至顶部索引层节点数等于2或索引总层数等于最高索引层数32;
所述索引节点包括:指向下层节点的down指针、指向同层下一索引节点的next指针和对应底层双向链表节点中最大标识号的值;如果继续添加数据,则需要在构建的新节点数量大于阈值后更新索引。
进一步地,所述创建模块,当所述检测模块检测到底层双向链表中新构建的节点数量超过阈值时,更新索引,更新前的索引各层末尾节点的next指针指向此次更新后索引的头节点,同时更新或扩充顶部索引层。
进一步地,所述数据存储模块,还用于向底层双向链表添加数据:
当所述检测模块判断待添加数据的标识号大于当前底层双向链表中已添加数据的最大标识号时,将两个标识号之间的数据填充为默认值,之后判断所述待添加数据与当前底层双向链表尾部节点的数据是否相同,如不相同则构建新节点并初始化新节点的数据和数据的重复数量,否则修改当前底层双向链表尾部节点的重复数量;
在所述检测模块判断待添加数据的标识号小于当前底层双向链表中已添加数据的最大标识号时,将待添加数据添加至底层双向链表对应标识号的节点处。
更进一步地,当所述待添加数据的标识号小于当前底层双向链表中已添加数据的最大标识号时,如果底层双向链表中对应标识号的节点上的数据重复数量等于1,直接修改该节点的数据即可,否则需要将所述对应标识号的节点进行分裂后,修改新节点的数据和重复数量,同时保证标识号的顺序不变。
为实现上述目的,本发明还提供了一种用于超大规模集成电路自动化设计的数据存储方法,包括以下步骤:
为待存储数据分配标识号,有效标识号从小到大递增;
按照标识号顺序,使用RLE编码优化数据并存储到底层双向链表中;
在所述底层双向链表的节点数量大于预设阈值时,创建多层跳表索引。
进一步地,所述按照标识号顺序,使用RLE编码优化数据并存储到底层双向链表中的步骤,进一步包括:存储多份相同数据时,所述底层双向链表的节点存储一份数据和所述数据的重复数量。
进一步地,所述创建多层跳表索引的步骤,进一步包括:
在底层双向链表中每两个节点生成一个索引节点,建立一层索引,所述索引节点包括:指向底层链表节点的down指针、指向同层下一索引节点的next指针和对应底层双向链表节点中最大标识号的值;
在每层索引中每隔一个索引节点生成上层索引节点,所述上层索引节点包括:指向下层索引节点的down指针、指向同层下一索引节点的next指针和对应底层双向链表节点中最大标识号的值。
进一步地,还包括向底层双向链表中添加、修改或删除数据的步骤。
进一步地,所述向底层双向链表中添加数据的步骤,进一步包括:
根据待添加数据的标识号查找底层双向链表中是否存在对应标识号的节点;
如果不存在对应标识号的节点,则将两个标识号之间的数据填充为默认值,之后判断所述待添加数据与当前底层双向链表尾部节点的数据是否相同,如不相同则构建新节点并初始化新节点的数据和数据的重复数量,否则修改尾部节点数据的重复数量;
如果存在对应标识号的节点,且节点重复数量等于1,直接修改该节点的数据,否则需要将所述对应标识号的节点进行分裂后,修改新节点的数据和重复数量,同时保证标识号的顺序不变。
进一步地,所述根据待添加数据的标识号查找底层双向链表中是否存在对应标识号的节点的步骤,进一步包括:
对比当前底层双向链表已添加数据的最大标识号、上次访问的标识号与当前待添加数据的标识号差值的绝对值;如果此时未构建多层索引,则根据最小绝对值的节点开始向左或向右遍历,直至在底层双向链表上查找到具体节点;
如果此时已构建索引,则对比最小绝对值与两倍索引层数的大小,如果最小绝对值小于两倍索引层数,则通过底层双向链表查找效率更高,反之则需要通过索引进行查找。
进一步地,使用索引进行查找时需要从顶向下遍历,遍历的同时对比待添加数据的标识号与索引节点的索引值,如果发现待添加数据的标识号位于同索引层两个相邻节点索引值之间,则通过索引节点的down指针往下层索引遍历,直至底层双向链表,找到对应标识号的节点位置。
更进一步地,所述向底层双向链表中修改或删除数据的步骤,进一步包括:
根据待修改数据或待删除数据的标识号在底层双向链表中查找到对应标识号的节点,修改或删除所述对应标识号的节点上的数据,删除数据时,将数据内容修改为默认值;
如果所述对应标识号的节点上的重复数量大于1,则需要将节点进行分裂后,在对应标识号的新节点上单独进行修改或删除数据。
为实现上述目的,本发明还提供一种电子设备,包括存储器、处理器,以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器,用于执行所述存储器所存放的计算机程序,以实现如上所述的用于超大规模集成电路自动化设计的数据存储方法。
为实现上述目的,本发明还提供一种计算机可读存储介质,所述存储介质中存储有计算机程序,所述计算机程序由处理器加载并执行以实现如上所述的用于超大规模集成电路自动化设计的数据存储方法。
本发明提供的用于超大规模集成电路自动化设计的数据存储系统,与现有技术相比具有如下有益效果:
本发明采用双向链表存储数据,数据标识号与所述数据存储系统的下标保持一致,并使用RLE编码压缩数据,同时使用跳表构建多层索引,实现了对存储系统高效的增加、删除、修改、查找数据操作,保证访问性能的同时,有效的节省了内存占用,尤其是涉及到EDA工具中对海量重复数据的操作时,效果更显著。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,并与本发明的实施例一起,用于解释本发明,并不构成对本发明的限制。在附图中:
图1为根据本发明实施例的用于超大规模集成电路自动化设计的数据存储系统结构示意图;
图2为根据本发明实施例的RLE编码示意图;
图3为根据本发明实施例的底层双向链表节点数量未达到阈值时添加数据示意图;
图4为根据本发明实施例的底层双向链表节点数量大于等于阈值时添加数据示意图;
图5为根据本发明实施例的节点分裂示意图;
图6为根据本发明实施例的用于超大规模集成电路自动化设计的数据存储方法流程图;
图7为根据本发明实施例的电子设备结构示意图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
下面将参照附图更详细地描述本发明的实施例。虽然附图中显示了本发明的某些实施例,然而应当理解的是,本发明可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本发明。应当理解的是,本发明的附图及实施例仅用于示例性作用,并非用于限制本发明的保护范围。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本发明中可能提及了“第一”、“第二”等概念仅用于对不同的装置、组件或部件进行区分,并非用于限定这些装置、组件或部件所执行的功能的顺序或者相互依存关系。
需要注意,本发明中可能提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。“多个”应理解为两个或以上。
需要注意,本申请实施例中所述的RLE(Run-Length Encoding)编码,是一种无损数据压缩方法。对于连续的重复数据,RLE编码可以通过计数和编码的方式进行压缩,将连续的重复数据描述为数据与重复次数,从而达到数据压缩的目的。
需要注意,本申请实施例中所述的跳表,是一种数据结构。跳表通过维护一个多层次的链表来实现,且与前一层(下面一层)链表元素的数量相比,每一层链表中的元素的数量更少。
实施例1
本发明的实施例中,提供了一种用于超大规模集成电路自动化设计的数据存储系统,包括:
接收模块,用于接收带有标识号的数据,所述标识号从小到大递增;
数据存储模块,用于按照标识号顺序,采用RLE编码将数据存储到数据库的底层双向链表中;
创建模块,用于设置所述底层双向链表的节点的阈值;在所述底层双向链表的节点个数超过所述阈值时,创建多层跳表索引;还用于接收模块接收数据时,在所述检测模块判断待添加数据的标识号大于当前底层双向链表中已添加数据的最大标识号时,将两个标识号之间的数据填充为默认值,之后判断所述待添加数据与当前底层双向链表尾部节点的数据是否相同,如不相同则构建新节点并初始化新节点的数据和数据的重复数量,否则修改尾部节点数据的重复数量。
检测模块,用于接收模块接收数据时,检测底层双向链表中的节点个数是否超过阈值,以及判断待添加数据的标识号与当前底层双向链表中已添加数据的最大标识号的大小。
本发明提供的用于超大规模集成电路自动化设计的数据存储系统,基于RLE编码(run length encoding,简称RLE,游程编码)和跳表实现数据存储和访问,能够有效地解决存储大量重复数据的问题,同时保证高效的访问性能。其中跳表为存储实际数据的链表构建多层索引;RLE编码是一种无损压缩算法,如图2所示,简单来说,就是将连续重复数据描述为数据与重复次数,适用于数据序列中存在大量连续重复数据的情况,尤其是EDA工具开发中。
图1为根据本发明实施例的用于超大规模集成电路自动化设计的数据存储系统结构示意图,如图1所示,本发明的用于超大规模集成电路自动化设计的数据存储系统,包括:接收模块110、数据存储模块120、检测模块130、创建模块140,以及索引模块150,其中:
接收模块110,用于接收数据(data);
数据存储模块120,与接收模块110、检测模块130相连,以id(标识号)为下标将实际数据存储到底层双向链表中。底层双向链表(Double-ended linked list)是一种数据结构,其中每个节点不仅包含一个指向下一个节点的指针,还包含一个指向上一个(previous)节点的指针,这允许高效地在链表的两个方向上遍历和修改元素。由于底层双向链表不像数组那样存在直接用于访问数据的“下标”,因此需要使用者提前为数据分配id,有效id从0开始递增,使用id对应下标的方式将数据存储到底层双向链表中,方便直接用id进行对数据的存储和访问。实际数据为不同类型的对象,对象被存储在底层双向链表中,数据存储模块120在存储数据时采用RLE编码进行优化,保证相同的数据仅保留一份,因此底层双向链表的节点被表示为实际数据(data)与重复数量(num)。
检测模块130,与接收模块110、数据存储模块120和创建模块140相连,用于判断底层双向链表中节点个数是否超过阈值,以及判断待添加数据的id与当前底层双向链表中已添加数据的最大id的大小。当节点个数超过阈值之后,为了保证访问效率,会构建多层跳表索引,索引的层级(level)与底层双向链表的长度有关,最多为32层。
创建模块140,与数据存储模块120和检测模块130相连,用于设置底层双向链表节点的阈值(threshold);用于检测模块130判断所述底层双向链表的节点个数超过阈值时,创建多层跳表索引。
本申请实施例中,创建模块140在底层双向链表中每两个节点生成一个索引节点,建立一层索引,然后用同样的方式通过一层索引节点来创建二层索引,以此类推,直至顶部索引层节点数等于2或索引总层数等于最高索引层数32。所述索引节点包括指向下层节点的down指针、指向同层下一索引节点的next指针和对应底层链表节点中最大标识号的值;如果继续添加数据,则需要在构建的新节点数量大于阈值后更新索引。更新方法与创建索引一致,旧索引各层末尾节点的next指针指向此次新创建索引的头节点,同时更新或扩充顶部索引层。
索引模块150,用于记录创建的索引信息。
本发明实施例中,所述底层双向链表设有全局的游标以及max_id(当前底层双向链表已添加数据的最大id)。游标指向底层双向链表中上次访问的节点并记录其id为pre_id。max_id是当前底层双向链表已添加数据的最大id,对应底层双向链表的尾部节点,二者都是基于局部性原理进行设计,可以节省寻址时间。
本发明实施例中,所述数据存储系统访问数据的实现方法如下:首先需要对比max_id、pre_id与当前待添加数据id差值的绝对值,取最小绝对值为min,如果此时还未构建多层索引,则根据对比结果从差值更小的节点开始向左或向右遍历,直至在底层双向链表上查找到具体节点。如果此时索引已构建,则对比min与两倍索引层数(即2 * level),如果min < 2 * level,说明通过底层双向链表效率更高,反之则需要通过索引进行查找。使用索引时需要从顶向下遍历,遍历的同时对比id与索引节点的index值(索引值),如果发现id位于同索引层两个相邻节点index值之间,则通过down指针往下层索引遍历,直到底层双向链表,此时可以根据情况往后遍历或不需要遍历,最后确定数据的存储位置。
所述数据存储系统添加数据的实现方法如下:为了便于访问以及构建索引,待添加的数据需要添加到id对应的下标处。首先进行寻址,如果底层双向链表对应待添加数据id的位置并不存在节点,须构建新节点,将中间部分初始化为默认值,之后在底层双向链表尾部添加所需数据。如果存在节点,并已被初始化为默认值,则需要修改数据。添加数据前,需要判断当前底层双向链表最后一个节点的数据是否与待添加数据相同,如果与待添加数据相同,则添加数据时仅需要将最后一个节点的num加1,否则将构造新节点并初始化新节点的data,同时将num初始化为1,从而保证相同的数据只保留一份。
图3为根据本发明实施例的底层双向链表节点数量未达到阈值时添加数据示意图,如图3所示,底层双向链表的节点表示为data和num(data的重复次数)。此时链表中一共有6个节点,一共存储了10份有效数据,分别是ABBBBDEEFF,这10份有效数据id从0到12,其中id分别为5、6、7的三份数据暂未添加到底层双向链表中,由于先添加了id更大的数据,因此此处已用默认值(空字符)填充。游标pre指针指向第四个节点,上次访问的数据,即pre_id的值为8。如果要添加数据,具体步骤为:判断待添加数据的id与max_id,如果id大于max_id,说明需要在底层双向链表末尾添加数据,需要将(max_id,id)范围内的数据全部初始化为默认值,之后再判断待添加数据是否等于此时尾部节点的data值(即数据是否相同),如果等于则需要将底层双向链表尾部节点的num值加一,否则需要构建新节点,并初始化data与num。如果待添加数据的id小于max_id,则说明该id处已有节点存在并被初始化为默认值,需要对比max_id、pre_id与当前待添加数据id差的绝对值,从差的绝对值更小的节点开始向左或向右遍历,直至查找到对应id的具体位置。例如此时要添加数据的id等于13,data为H,由于实例中max_ id为12,因此直接在底层双向链表的尾部添加数据,又因为H不等于最后一个节点的data值F,因此要构建新节点并初始化data为H,同时将新节点的num置为1。
图4为根据本发明实施例的底层双向链表节点数量大于等于阈值时添加数据示意图,如图4所示,此时有50000个节点,max_id的值为70040,此时索引的层数level等于15,索引节点的index值等于实际指向底层双向链表节点处数据的最大id。游标的pre_id等于4。由于底层链表节点数达到threshold,因此已构建多层索引。此时添加数据的步骤为:对比id与max_id,查看待添加数据的位置是否已有节点,如果还没有创建节点,则需要从尾部添加数据。如果已有节点,则需要获取max_id、pre_id与当前待插入元素id差值的绝对值,取二者的小值为min,如果 min < 2 * level,则表示通过游标或末尾节点访问速度更快,仅需要从节点处通过双向链表查找,反之则使用多层索引进行寻址。通过多层索引进行寻址时,需要从顶部索引层开始,如果id位于同一索引层相邻节点之间,则通过down指针向下遍历,直至底层双向链表,此时就可以通过底层双向链表进行查找。例如要添加数据的id等于70003,data值为G,由上文可知需要通过索引进行寻址,寻址过程如图4中粗黑线所示。得到id对应的节点是一层索引中index为70007的节点所指向的底层双向链表节点,该底层双向链表节点上有6个空字符数据,表示的id范围是[70002,70007],此时添加数据时,需要将该节点分裂为3个,并修改down指针指向最右侧的新节点,分裂情况如图5所示。
本发明实施例中,所述数据存储系统修改数据的实现方法如下:查找到需修改的元素位置时,如果底层双向链表节点num = 1,直接修改data即可,如果 num > 1,则需要根据实际情况将所需要修改的元素从节点中分裂出来单独处理,修改新节点的num值,同时保证下标顺序不变。除此之外,如果二层索引的down指针直接指向该元素所在节点,而不需要在底层双向链表中再次遍历查找时,需要将此二层索引的down指针指向此次分裂中最大id所在的节点,即最右侧节点,如图5所示。
根据本实施例,所述数据存储系统删除数据的实现方法如下:为了避免索引的重复创建与修改,便于维护索引,删除数据时并不直接删除节点,仅需将要删除数据修改为默认值即可,表示数据已被删除。例如上述实施方式中的空字符,表示此处数据已被删除。
本发明实施例中,对于多层跳表索引的创建,其实现方式为:在底层双向链表中每两个节点生成一个索引节点,以此来建立一层索引,然后用同样的方式通过一层索引节点来创建二层索引,以此类推,直至顶部索引层节点数等于2或索引总层数等于自定义的maxLevel值,最大层数maxLevel默认为32,如果每一层筛选率是1/2,则32高度的索引层可以对应2^32个节点。创建索引节点时,down指针指向下层对应节点,next指针指向同层下一索引节点,index等于当前索引对应底层链表节点的最大id(对应底层双向链表节点的num或许会大于1)。
对于多层跳表索引的更新,实现方式为:构建多层跳表索引之后,继续往底层双向链表中添加数据,此时需要记录新添加的节点数量,如果新添加的节点数量大于阈值,则更新索引,更新方法与创建索引一致,之前索引各层末尾节点的next指针指向此次新创建索引的头节点,同时更新或扩充顶部索引层。
本发明适用于超大规模集成电路自动化设计领域,尤其对EDA工具海量重复数据的存储与访问有着更好的效果。采用RLE编码压缩数据,同时用跳表构建多层索引,在保证访问效率的同时大大节省了存储空间。
实施例2
本发明的实施例中,还提供了一种用于超大规模集成电路自动化设计的数据存储方法,包括以下步骤:
为待存储数据分配id,有效id从小到大递增;
按照id顺序,使用RLE编码优化数据并存储到底层双向链表中;
在所述底层双向链表的节点数量大于预设阈值时,创建多层跳表索引。
图6为根据本发明实施例的用于超大规模集成电路自动化设计的数据存储方法流程图,下面将参考图6对本实施例的用于超大规模集成电路自动化设计的数据存储方法进行详细描述。
在步骤601,为待存储数据分配id。采用一个数字对需要存储的数据进行标识,有效id从0开始递增。
在步骤602,使用RLE编码对待存储数据进行优化。用RLE编码优化数据,保证相同的数据只存储一份,记录相同数据的数量。
在步骤603,判断底层双向链表的节点个数是否超过阈值。如果底层双向链表的节点个数未超过阈值,则进入步骤604,否则进入步骤605。
在步骤604,比较待添加数据的id与当前底层双向链表已添加数据中的max_id。若待添加数据的id大于max_id,则将(max_id,id)之间的数据用默认值填充之后进入步骤606,否则进入步骤607。
在步骤605,构建多层跳表索引。在底层双向链表中每两个节点生成一个索引节点,以此来建立一层索引。建立多层索引时,每层索引中都是每隔一个节点生成上层索引节点,上层索引节点包括指向底层链表节点的down指针,指向同层下一索引节点的next指针以及此节点对应底层双向链表实际节点中id的最大值。如果继续添加数据,则需要在新构建的节点数量大于阈值后更新索引。
在步骤606,判断底层双向链表尾部节点的数据是否与待添加数据相同。如果相同,则将底层双向链表尾部节点的num加1;否则创建新节点,初始化新节点为待添加数据,并将其num置为1。创建新节点时,如果待添加数据的id与当前底层双向链表的max_id存在大于1的差值,则将新的尾部节点与当前底层双向链表尾部节点之间的部分初始化为默认值,在新的尾部节点添加该数据。
在步骤607,将待添加数据添加至底层双向链表中对应id的节点上。由于max_id对应底层双向链表的尾部节点,当待添加数据的id小于max_id时,说明底层双向链表中已存在对应节点且该节点被初始化为默认值,只需修改数据为待添加数据即可。需要注意,如果该底层双向链表节点的num = 1,直接修改data即可,如果 num > 1,则需要根据将所需要修改的data从节点中分裂出来单独处理,分裂处理方式参考上述实施例。
实施例3
本发明的实施例中,还提供了一种电子设备,图7为根据本发明实施例的电子设备结构示意图,如图7所示,本发明的电子设备,包括处理器701,以及存储器702,其中,
存储器702存储有计算机程序,计算机程序在被处理器701读取执行时,执行如上所述的用于超大规模集成电路自动化设计的数据存储方法实施例中的步骤。
实施例4
本发明的实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行如上所述的用于超大规模集成电路自动化设计的数据存储方法实施例中的步骤。
在本实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本领域普通技术人员可以理解:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (18)
1.一种用于超大规模集成电路自动化设计的数据存储系统,其特征在于,包括:接收模块、数据存储模块、创建模块,以及检测模块;
所述接收模块,用于接收带有标识号的数据,所述标识号从小到大递增;
所述数据存储模块,与所述接收模块相连,用于按照标识号顺序,采用RLE编码优化数据并将数据存储到数据库的底层双向链表中;
所述创建模块,用于设置所述底层双向链表的节点阈值,在所述底层双向链表的节点数量超过所述阈值时,创建多层跳表索引;
所述检测模块,用于检测底层双向链表中的节点数量是否超过所述阈值,以及比较待添加数据的标识号与当前底层双向链表中已添加数据的最大标识号。
2.根据权利要求1所述的用于超大规模集成电路自动化设计的数据存储系统,其特征在于,所述底层双向链表,其节点包括数据和数据的重复数量。
3.根据权利要求1所述的用于超大规模集成电路自动化设计的数据存储系统,其特征在于,所述底层双向链表设有全局的游标和当前底层双向链表已添加数据的标识号的最大值;所述游标指向底层双向链表中上次访问的节点并记录其标识号的值;所述标识号的最大值对应底层双向链表的尾部节点。
4.根据权利要求1所述的用于超大规模集成电路自动化设计的数据存储系统,其特征在于,所述创建模块,在所述检测模块判断待添加数据的标识号大于当前底层双向链表中已添加数据的最大标识号时,将两个标识号之间的数据填充为默认值,之后判断所述待添加数据与当前底层双向链表尾部节点的数据是否相同,如不相同则构建新节点并初始化新节点的数据和数据的重复数量,否则修改尾部节点数据的重复数量。
5.根据权利要求1所述的用于超大规模集成电路自动化设计的数据存储系统,其特征在于,所述创建模块,当所述检测模块检测到底层双向链表的节点数量超过阈值时,在底层双向链表中每两个节点生成一个索引节点,建立一层索引,然后用同样的方式通过一层索引节点来创建二层索引,以此类推,直至顶部索引层节点数等于2或索引总层数等于最高索引层数32;
所述索引节点包括:指向下层节点的down指针、指向同层下一索引节点的next指针和对应底层双向链表节点中最大标识号的值;如果继续添加数据,则需要在构建的新节点数量大于阈值后更新索引。
6.根据权利要求1所述的用于超大规模集成电路自动化设计的数据存储系统,其特征在于,所述创建模块,当所述检测模块检测到底层双向链表中新构建的节点数量超过阈值时,更新索引,更新前的索引各层末尾节点的next指针指向此次更新后索引的头节点,同时更新或扩充顶部索引层。
7.根据权利要求1所述的用于超大规模集成电路自动化设计的数据存储系统,其特征在于,所述数据存储模块,还用于向底层双向链表添加数据:
当所述检测模块判断待添加数据的标识号大于当前底层双向链表中已添加数据的最大标识号时,将两个标识号之间的数据填充为默认值,之后判断所述待添加数据与当前底层双向链表尾部节点的数据是否相同,如不相同则构建新节点并初始化新节点的数据和数据的重复数量,否则修改当前底层双向链表尾部节点的重复数量;
在所述检测模块判断待添加数据的标识号小于当前底层双向链表中已添加数据的最大标识号时,将待添加数据添加至底层双向链表对应标识号的节点处。
8.根据权利要求7所述的用于超大规模集成电路自动化设计的数据存储系统,其特征在于,当所述待添加数据的标识号小于当前底层双向链表中已添加数据的最大标识号时,如果底层双向链表中对应标识号的节点上的数据重复数量等于1,直接修改该节点的数据即可,否则需要将所述对应标识号的节点进行分裂后,修改新节点的数据和重复数量,同时保证标识号的顺序不变。
9.一种用于超大规模集成电路自动化设计的数据存储方法,其特征在于,包括以下步骤:
为待存储数据分配标识号,有效标识号从小到大递增;
按照标识号顺序,使用RLE编码优化数据并存储到底层双向链表中;
在所述底层双向链表的节点数量大于预设阈值时,创建多层跳表索引。
10.根据权利要求9所述的用于超大规模集成电路自动化设计的数据存储方法,其特征在于,所述按照标识号顺序,使用RLE编码优化数据并存储到底层双向链表中的步骤,进一步包括:存储多份相同数据时,所述底层双向链表的节点存储一份数据和所述数据的重复数量。
11.根据权利要求9所述的用于超大规模集成电路自动化设计的数据存储方法,其特征在于,所述创建多层跳表索引的步骤,进一步包括:
在底层双向链表中每两个节点生成一个索引节点,建立一层索引,所述索引节点包括:指向底层链表节点的down指针、指向同层下一索引节点的next指针和对应底层双向链表节点中最大标识号的值;
在每层索引中每隔一个索引节点生成上层索引节点,所述上层索引节点包括:指向下层索引节点的down指针、指向同层下一索引节点的next指针和对应底层双向链表节点中最大标识号的值。
12.根据权利要求9所述的用于超大规模集成电路自动化设计的数据存储方法,其特征在于,还包括向底层双向链表中添加、修改或删除数据的步骤。
13.根据权利要求12所述的用于超大规模集成电路自动化设计的数据存储方法,其特征在于,所述向底层双向链表中添加数据的步骤,进一步包括:
根据待添加数据的标识号查找底层双向链表中是否存在对应标识号的节点;
如果不存在对应标识号的节点,则将两个标识号之间的数据填充为默认值,之后判断所述待添加数据与当前底层双向链表尾部节点的数据是否相同,如不相同则构建新节点并初始化新节点的数据和数据的重复数量,否则修改尾部节点数据的重复数量;
如果存在对应标识号的节点,且节点重复数量等于1,直接修改该节点的数据,否则需要将所述对应标识号的节点进行分裂后,修改新节点的数据和重复数量,同时保证标识号的顺序不变。
14.根据权利要求13所述的用于超大规模集成电路自动化设计的数据存储方法,其特征在于,所述根据待添加数据的标识号查找底层双向链表中是否存在对应标识号的节点的步骤,进一步包括:
对比当前底层双向链表已添加数据的最大标识号、上次访问的标识号与当前待添加数据的标识号差值的绝对值;如果此时未构建多层索引,则根据最小绝对值的节点开始向左或向右遍历,直至在底层双向链表上查找到具体节点;
如果此时已构建索引,则对比最小绝对值与两倍索引层数的大小,如果最小绝对值小于两倍索引层数,则通过底层双向链表查找效率更高,反之则需要通过索引进行查找。
15.根据权利要求14所述的用于超大规模集成电路自动化设计的数据存储方法,其特征在于,使用索引进行查找时需要从顶向下遍历,遍历的同时对比待添加数据的标识号与索引节点的索引值,如果发现待添加数据的标识号位于同索引层两个相邻节点索引值之间,则通过索引节点的down指针往下层索引遍历,直至底层双向链表,找到对应标识号的节点位置。
16.根据权利要求12所述的用于超大规模集成电路自动化设计的数据存储方法,其特征在于,所述向底层双向链表中修改或删除数据的步骤,进一步包括:
根据待修改数据或待删除数据的标识号在底层双向链表中查找到对应标识号的节点,修改或删除所述对应标识号的节点上的数据,删除数据时,将数据内容修改为默认值;
如果所述对应标识号的节点上的重复数量大于1,则需要将节点进行分裂后,在对应标识号的新节点上单独进行修改或删除数据。
17.一种电子设备,包括存储器、处理器,以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器,用于执行所述存储器所存放的计算机程序,以实现权利要求9-16任一项所述的用于超大规模集成电路自动化设计的数据存储方法。
18.一种计算机可读存储介质,其特征在于,所述存储介质中存储有计算机程序,所述计算机程序由处理器加载并执行以实现权利要求9-16任一项所述的用于超大规模集成电路自动化设计的数据存储方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410593006.8A CN118170769B (zh) | 2024-05-14 | 2024-05-14 | 用于超大规模集成电路自动化设计的数据存储系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410593006.8A CN118170769B (zh) | 2024-05-14 | 2024-05-14 | 用于超大规模集成电路自动化设计的数据存储系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN118170769A true CN118170769A (zh) | 2024-06-11 |
CN118170769B CN118170769B (zh) | 2024-07-30 |
Family
ID=91352948
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410593006.8A Active CN118170769B (zh) | 2024-05-14 | 2024-05-14 | 用于超大规模集成电路自动化设计的数据存储系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118170769B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160077926A1 (en) * | 2014-09-16 | 2016-03-17 | Actifio, Inc. | System and method for multi-hop data backup |
US10976949B1 (en) * | 2018-07-10 | 2021-04-13 | Amazon Technologies, Inc. | Archiving of streaming data |
CN116431964A (zh) * | 2023-04-20 | 2023-07-14 | 浙江省水利河口研究院(浙江省海洋规划设计研究院) | 一种复杂河网水系骨架线生成的游程剥离法 |
CN117908755A (zh) * | 2022-10-11 | 2024-04-19 | 河海大学 | 一种基于非易失性内存的键值存储写优化方法 |
-
2024
- 2024-05-14 CN CN202410593006.8A patent/CN118170769B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160077926A1 (en) * | 2014-09-16 | 2016-03-17 | Actifio, Inc. | System and method for multi-hop data backup |
US10976949B1 (en) * | 2018-07-10 | 2021-04-13 | Amazon Technologies, Inc. | Archiving of streaming data |
CN117908755A (zh) * | 2022-10-11 | 2024-04-19 | 河海大学 | 一种基于非易失性内存的键值存储写优化方法 |
CN116431964A (zh) * | 2023-04-20 | 2023-07-14 | 浙江省水利河口研究院(浙江省海洋规划设计研究院) | 一种复杂河网水系骨架线生成的游程剥离法 |
Non-Patent Citations (2)
Title |
---|
沈定涛;王结臣;陈焱明;于庆;: "一种顾及属性的游程编码"交"运算方法与实验", 地理与地理信息科学, no. 03, 15 May 2009 (2009-05-15) * |
郭世钢;: "基于游程编码的PCB缺陷检测算法", 计算机应用, no. 09, 1 September 2009 (2009-09-01) * |
Also Published As
Publication number | Publication date |
---|---|
CN118170769B (zh) | 2024-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11604604B1 (en) | Efficient FTL implementation with compression | |
CN104283567B (zh) | 一种名称数据的压缩、解压缩方法及设备 | |
US8838551B2 (en) | Multi-level database compression | |
US8659451B2 (en) | Indexing compressed data | |
CN107038206B (zh) | Lsm树的建立方法、lsm树的数据读取方法和服务器 | |
US7511639B2 (en) | Data compression for communication between two or more components in a system | |
KR20200112875A (ko) | 고속 그래프 순회를 위한 컴퓨터 아키텍처 | |
CN108052643B (zh) | 基于LSM Tree结构的数据存储方法、装置及存储引擎 | |
CN101963944B (zh) | 对象存储方法和系统 | |
CN105577719A (zh) | 一种数据压缩方法和装置 | |
KR100484137B1 (ko) | 개선된 허프만 디코딩 방법 및 장치 | |
Pibiri et al. | Dynamic elias-fano representation | |
CN118170769B (zh) | 用于超大规模集成电路自动化设计的数据存储系统及方法 | |
CN113468080A (zh) | 一种全闪元数据的缓存方法、系统及相关装置 | |
KR102354343B1 (ko) | 블록체인 기반의 지리공간 데이터를 위한 공간 데이터 인덱싱 방법 및 장치 | |
US10983975B2 (en) | Data block storage method and apparatus, and electronic device | |
CN113448487B (zh) | 写入闪存管理表的计算机可读取存储介质、方法及装置 | |
CN106528436B (zh) | 数据储存装置及其数据维护方法 | |
KR102233880B1 (ko) | 싱글-레벨 기반의 데이터 저장 장치 및 방법 | |
CN111767280A (zh) | 数据处理方法、装置及存储介质 | |
CN108832935B (zh) | 一种rle算法实现方法、系统、设备及计算机存储介质 | |
CN115562584A (zh) | 一种存储系统的磁盘空间分配方法、装置以及介质 | |
CN114116711A (zh) | 数据处理方法、装置、数据库、存储介质及程序产品 | |
CN106991021B (zh) | 从现有数据文件构建新数据文件的方法及系统 | |
Pagh | Basic external memory data structures |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |