CN112783896B - 一种用于加载文件减少内存使用率的方法 - Google Patents
一种用于加载文件减少内存使用率的方法 Download PDFInfo
- Publication number
- CN112783896B CN112783896B CN202110039334.XA CN202110039334A CN112783896B CN 112783896 B CN112783896 B CN 112783896B CN 202110039334 A CN202110039334 A CN 202110039334A CN 112783896 B CN112783896 B CN 112783896B
- Authority
- CN
- China
- Prior art keywords
- data
- index
- index data
- file
- character string
- 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
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/2228—Indexing structures
- G06F16/2264—Multidimensional index structures
-
- 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/25—Integrating or interfacing systems involving database management systems
- G06F16/254—Extract, transform and load [ETL] procedures, e.g. ETL data flows in data warehouses
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种用于加载文件减少内存使用率的方法,包括以下步骤:从数据库中读取目标数据库表所有的索引数据;通过分隔符将所有的索引数据放在一个字符串中;将构建的索引字符串中的偏移量放在一个无符号整型的数组中;计算索引数据的条数。本发明所述的一种用于加载文件减少内存使用率的方法,将所有索引数据放在一个字符串中后写入磁盘文件,不用每次都从数据库加载,能够减少大量字符串带来的额外的内存开销,将所有索引数据放在一个字符串中,能够方便调试,调试时容易通过分隔符发现与定位问题,无符号整型的数组采用4个字节,能表示4G的数据,满足索引数据的需求,而且可以节省内存空间的使用。
Description
技术领域
本发明涉及数据处理领域,特别涉及一种用于加载文件减少内存使用率的方法。
背景技术
在数据溯源的应用场景中,需要将数据进行上链,以跟踪数据的变化过程,如变化的时间、字段、修改的值等等。在读取数据的过程中需要根据数据的主键或唯一索引来读取数据,并以此作为该条数据的唯一标识进行上链。在这个过程中有部分数据的唯一索引是复合索引,即由多个字段联合组成的索引,此时需要将数据的索引数据拉取到本地,通过索引来读取数据。
如果数据的条数较多,将索引按照从数据库中读的形式逐条存储在内存中,这样内存中就会存储大量的字符串,字符串在高级编程语言中回占用额外的内存,导致内存中的数据量比实际的要大很多,数据量越大其占用的额外内存就会越明显,导致机器内存被耗尽、服务运行不稳定,甚至被系统终止,在有垃圾回收机制的编程语言中,也会增加垃圾回收的压力,使程序内存释放缓慢;不满足人们的使用要求,为此,我们提出一种用于加载文件减少内存使用率的方法。
发明内容
本发明的主要目的在于提供一种用于加载文件减少内存使用率的方法,可以有效解决背景技术中的问题。
为实现上述目的,本发明采取的技术方案为:
一种用于加载文件减少内存使用率的方法,包括以下步骤:
(1)、从数据库中读取目标数据库表所有的索引数据;
(2)、通过分隔符将所有的索引数据放在一个字符串中;
(3)、将构建的索引字符串中的偏移量放在一个无符号整型的数组中;
(4)、计算索引数据的条数;
(5)、将索引数据的字符串写入到磁盘文件,并在索引文件的开始处写入数据条目与分隔符;
(6)、在读取数据库中的数据前,先读取本地磁盘索引文件,解析出数据条数与索引数据;
(7)、将索引数据放在一个字符串中;
(8)、根据数据条数在此基础上加1来创建偏移量数组;
(9)、将每条索引在整体索引数据中的位置写入到偏移量数组,并在偏移量数组最后一个空间写入索引数据结束的偏移量。
优选的,步骤(1)中读取目标数据库表所有的索引数据时先从目标数据库表中读取所有的索引数据,然后将读取的索引数据写入磁盘文件中。
优选的,步骤(2)中分隔符采用换行符。
优选的,步骤(3)中无符号整型的数组采用能够表示4G的数据的4个字节。
优选的,步骤(5)中,索引数据的条数也写入磁盘文件,使用动态增长的分配方式分配文件加载索引数据时的内存空间。
优选的,步骤(6)中读取本地磁盘索引文件为步骤(5)中写入的磁盘文件。
与现有技术相比,本发明一种用于加载文件减少内存使用率的方法具有如下有益效果:
1、本发明将所有索引数据放在一个字符串中后写入磁盘文件,不用每次都从数据库加载,能够减少大量字符串带来的额外的内存开销;
2、本发明将所有索引数据放在一个字符串中,能够方便调试,调试时容易通过分隔符发现与定位问题;
3、本发明中无符号整型的数组采用4个字节,能表示4G的数据,满足索引数据的需求,而且可以节省内存空间的使用。
附图说明
图1为本发明一种用于加载文件减少内存使用率的方法的流程图;
图2为本发明一种用于加载文件减少内存使用率的方法中创建偏移量数组的结构图。
具体实施方式
为使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体实施方式,进一步阐述本发明。
实施例1
一种用于加载文件减少内存使用率的方法,包括以下步骤:
(1)、从数据库中读取目标数据库表所有的索引数据;
读取目标数据库表所有的索引数据时先从目标数据库表中读取所有的索引数据,然后将读取的索引数据写入磁盘文件中,后续加载索引数据时就从文件中读取。
(2)、通过分隔符将所有的索引数据放在一个字符串中;
分隔符采用换行符,加上分隔符可以方便调试,调试时容易通过分隔符发现与定位问题,而且保持与后面步骤(5)中写入磁盘文件的数据一致。
(3)、将构建的索引字符串中的偏移量放在一个无符号整型的数组中;
无符号整型的数组采用能够表示4G的数据的4个字节,满足索引数据的需求,而且可以节省内存空间的使用。
(4)、计算索引数据的条数;
(5)、将索引数据的字符串写入到磁盘文件,并在索引文件的开始处写入数据条目与分隔符;
索引数据的条数也写入磁盘文件,使用动态增长的分配方式分配文件加载索引数据时的内存空间;
写入磁盘文件是为了后续的操作中直接从文件加载,而不用每次都从数据库加载,节约网络传输带来的流量与加载时间的开销。
(6)、在读取数据库中的数据前,先读取本地磁盘索引文件,解析出数据条数与索引数据;
读取本地磁盘索引文件为步骤(5)中写入的磁盘文件。
(7)、将索引数据放在一个字符串中。
(8)、根据数据条数在此基础上加1来创建偏移量数组,增加的一个内存空间是为了简化从偏移量数组获取索引数据时,省略边界情况下的处理;
(9)、将每条索引在整体索引数据中的位置写入到偏移量数组,并在偏移量数组最后一个空间写入索引数据结束的偏移量。
实施例2
如现在有一个数据库其唯一索引为复合索引,且索引字段为3个,如F1,F2,F3。要将数据库中的数据进行上链操作,先使用SQL语句select(F1,F2,F3)from table_name从数据库中读取所有的索引数据,如{{v11,v12,v13},{v21,v22,v23},{v31,v32,v33}…},将这些获取到的索引数据存储在一个字符串当中,如:v11v12v12v21v22v23v31v32v33…。在这个过程中同时构建偏移量数组,根据索引的条数rows与字段数nums给偏移量数组分配内存空间,其大小为(rows*nums+1)*4,增加的一个空间用于保存偏移量末尾的位置,以简化读取索引数据的操作。在存储索引数据时,将每条索引数据的在存储空间的起始位置写到偏移量数组对应的位置,如v11的偏移量为0,保存在偏移量数组第1个空间,v12的偏移量为v11的长度,将其保存在偏移量数组的第二个空间,如此依次保存索引数据,与构建偏移量数组。当所有的索引数据都按上述过程处理完后,在偏移量数组的最后一个空间写入,索引数据的结束位置,即所有数据的长度,到此从数据库加载索引的流程结束。这时可以将索引数据保存到磁盘中,这样当程序重启后,直接从磁盘文件加载索引即可,无需再次从数据库获取索引数据;也可以直接进行数据读取操作。
如要获取第二条数据,在偏移量数组中从第3、4、5个空间读取索引F1、F2、F3的值v21、v22、v23,通过索引数据构建SQL语句select*from table_name where F1=v21 andF2=v22 and F3=v23从数据库中读取数据。
索引数据写入磁盘文件时,在每条数据之间增加分隔符(如换行符),这样在从文件加载索引数据时可以还原出偏移量数组。如索引数据v11v12v12v21v22v23v31v32v33,其偏移量数组为s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,先将数据条数9与换行符写入磁盘文件,然后通过偏移量s1与s2将v11数据读取出来并在末尾添加换行符,通过s2,s3将v12的数据读取出来并在末尾添加换行符,依次将所有的数据取出并写入磁盘文件。
从磁盘文件加载索引数据时,先按分隔符读取索引文件第一条数据,其表示索引数据的的条数count,按照(count+1)*4的大小给偏移量数组分配空间。然后通过分隔符读取每一条索引数据,将这些数据存储到一个字符串中,在读取数据的过程中构建偏移量数组,将每条数据在字符串中的位置保存在偏移量数组中,其构建过程与从数据库加载的过程相同。
当数据量较大时,能有效的降低内存使用率,如4千万的数据条数,索引文件为430MB,如果直接通过字符串数组的方式加载到内存中,其实际分配的内存大于1.3GB,如采用双数组加载的方式,实际分配内存为740MB左右。
上面无符号整型按照32位计算,32位的偏移量能表示4G的数据,通常情况下对于索引数据已足够使用,当索引数据超过4G时则需要用64位表示。
综上所述,本发明一种用于加载文件减少内存使用率的方法,本发明将所有索引数据放在一个字符串中后写入磁盘文件,不用每次都从数据库加载,能够减少大量字符串带来的额外的内存开销;
本发明将所有索引数据放在一个字符串中,能够方便调试,调试时容易通过分隔符发现与定位问题;
本发明中无符号整型的数组采用4个字节,能表示4G的数据,满足索引数据的需求,而且可以节省内存空间的使用。
以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
Claims (6)
1.一种用于加载文件减少内存使用率的方法,其特征在于:包括以下步骤:
(1)、从数据库中读取目标数据库表所有的索引数据;
(2)、通过分隔符将所有的索引数据放在一个字符串中;
(3)、计算索引数据的条数;
(4)、将索引数据的字符串写入到磁盘索引文件,并在磁盘索引文件的开始处写入数据条目与分隔符;
(5)、在读取数据库中的数据前,先读取本地磁盘索引文件,解析出数据条数与索引数据;
(6)、将索引数据放在一个字符串中;
(7)、根据数据条数在此基础上加1来创建偏移量数组;
(8)、将每条索引在整体索引数据中的位置写入到偏移量数组,并在偏移量数组最后一个空间写入索引数据结束的偏移量。
2.根据权利要求1所述的一种用于加载文件减少内存使用率的方法,其特征在于:步骤(1)中读取目标数据库表所有的索引数据时先从目标数据库表中读取所有的索引数据。
3.根据权利要求1所述的一种用于加载文件减少内存使用率的方法,其特征在于:步骤(2)中分隔符采用换行符。
4.根据权利要求1所述的一种用于加载文件减少内存使用率的方法,其特征在于:步骤(3)中无符号整型的数组采用能够表示4G的数据的4个字节。
5.根据权利要求1所述的一种用于加载文件减少内存使用率的方法,其特征在于:步骤(5)中,索引数据的条数也写入磁盘文件,使用动态增长的分配方式分配文件加载索引数据时的内存空间。
6.根据权利要求5所述的一种用于加载文件减少内存使用率的方法,其特征在于:步骤(6)中读取本地磁盘索引文件为步骤(5)中写入的磁盘文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110039334.XA CN112783896B (zh) | 2021-01-12 | 2021-01-12 | 一种用于加载文件减少内存使用率的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110039334.XA CN112783896B (zh) | 2021-01-12 | 2021-01-12 | 一种用于加载文件减少内存使用率的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112783896A CN112783896A (zh) | 2021-05-11 |
CN112783896B true CN112783896B (zh) | 2023-05-23 |
Family
ID=75757110
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110039334.XA Active CN112783896B (zh) | 2021-01-12 | 2021-01-12 | 一种用于加载文件减少内存使用率的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112783896B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1831825A (zh) * | 2005-03-11 | 2006-09-13 | 株式会社东芝 | 文档管理方法和装置以及文档搜索方法和装置 |
TWI282062B (en) * | 2002-10-17 | 2007-06-01 | Inventec Appliances Corp | Method for retrieving vocabularies in a mobile phone |
CN101183363A (zh) * | 2006-11-13 | 2008-05-21 | 中兴通讯股份有限公司 | 一种利用系统表结构统一配置管理内存数据库的方法 |
CN103093753A (zh) * | 2012-12-14 | 2013-05-08 | 沈阳美行科技有限公司 | 一种导航系统用户语音自定义方法 |
CN105187551A (zh) * | 2015-09-29 | 2015-12-23 | 成都四象联创科技有限公司 | 基于云平台的分布式计算方法 |
CN108388569A (zh) * | 2018-01-09 | 2018-08-10 | 杭州电子科技大学 | 一种快速的键值数据库的系统及建立方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102375852A (zh) * | 2010-08-24 | 2012-03-14 | 中国移动通信集团公司 | 建立数据索引的方法、利用该索引查询数据的方法和系统 |
CN103177026A (zh) * | 2011-12-23 | 2013-06-26 | 北京新媒传信科技有限公司 | 数据管理方法和数据管理系统 |
CN103714134B (zh) * | 2013-12-18 | 2017-01-18 | 中国科学院计算技术研究所 | 一种网络流量数据索引方法及系统 |
JP6006740B2 (ja) * | 2014-02-27 | 2016-10-12 | ウイングアーク1st株式会社 | インデックス管理装置 |
CN106886375B (zh) * | 2017-03-27 | 2019-11-05 | 百度在线网络技术(北京)有限公司 | 存储数据的方法和装置 |
CN110413611B (zh) * | 2019-06-24 | 2023-05-12 | 腾讯科技(深圳)有限公司 | 数据存储、查询方法及装置 |
-
2021
- 2021-01-12 CN CN202110039334.XA patent/CN112783896B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI282062B (en) * | 2002-10-17 | 2007-06-01 | Inventec Appliances Corp | Method for retrieving vocabularies in a mobile phone |
CN1831825A (zh) * | 2005-03-11 | 2006-09-13 | 株式会社东芝 | 文档管理方法和装置以及文档搜索方法和装置 |
CN101183363A (zh) * | 2006-11-13 | 2008-05-21 | 中兴通讯股份有限公司 | 一种利用系统表结构统一配置管理内存数据库的方法 |
CN103093753A (zh) * | 2012-12-14 | 2013-05-08 | 沈阳美行科技有限公司 | 一种导航系统用户语音自定义方法 |
CN105187551A (zh) * | 2015-09-29 | 2015-12-23 | 成都四象联创科技有限公司 | 基于云平台的分布式计算方法 |
CN108388569A (zh) * | 2018-01-09 | 2018-08-10 | 杭州电子科技大学 | 一种快速的键值数据库的系统及建立方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112783896A (zh) | 2021-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20170031964A1 (en) | Rollover Strategies in a N-Bit Dictionary Compressed Column Store | |
CN106708427A (zh) | 一种适用于键值对数据的存储方法 | |
CN110147204B (zh) | 一种元数据落盘方法、装置、系统及计算机可读存储介质 | |
CN105117417A (zh) | 一种读优化的内存数据库Trie树索引方法 | |
CN107391544B (zh) | 列式存储数据的处理方法、装置、设备及计算机储存介质 | |
CN109213432B (zh) | 利用日志结构合并树将数据写入的存储设备及其方法 | |
CN103425435B (zh) | 磁盘存储方法及磁盘存储系统 | |
CN103019884A (zh) | 基于虚拟机快照的内存页去重方法及装置 | |
CN105912601A (zh) | 能量管理系统分布式实时内存数据库的分区存储方法 | |
US20180239791A1 (en) | Bitmap-based storage space management system and methods thereof | |
CN102880615A (zh) | 一种数据存储方法和装置 | |
CN106155917A (zh) | 内存管理方法及装置 | |
CN109445693A (zh) | 一种数据压缩方法和装置 | |
CN112784120B (zh) | 一种基于范围分片方式的kv内存数据库存储管理方法 | |
CN112783896B (zh) | 一种用于加载文件减少内存使用率的方法 | |
CN112380004B (zh) | 内存管理方法、装置、计算机可读存储介质及电子设备 | |
CN102331973A (zh) | 一种内存数据存储系统和内存数据的插入、删除方法 | |
CN113326262B (zh) | 基于键值数据库的数据处理方法、装置、设备及介质 | |
CN110781101A (zh) | 一种一对多映射关系的存储方法、装置、电子设备及介质 | |
CN110795247B (zh) | 一种应用于mcu的高效动态内存管理方法 | |
CN111752954B (zh) | 一种大规模特征数据存储的方法及装置 | |
CN110377601B (zh) | 一种基于B树数据结构的MapReduce计算过程优化方法 | |
CN110188069B (zh) | 一种csv文件存储方法、装置及计算机设备 | |
CN111382086B (zh) | 一种前缀树存储方法、装置、存储介质和计算机设备 | |
CN110321358A (zh) | 一种用户数据整编的方法及装置 |
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 |