CN116244313B - Json数据存储和访问方法、装置、计算机设备及介质 - Google Patents
Json数据存储和访问方法、装置、计算机设备及介质 Download PDFInfo
- Publication number
- CN116244313B CN116244313B CN202310505588.5A CN202310505588A CN116244313B CN 116244313 B CN116244313 B CN 116244313B CN 202310505588 A CN202310505588 A CN 202310505588A CN 116244313 B CN116244313 B CN 116244313B
- Authority
- CN
- China
- Prior art keywords
- data
- column
- bitmap
- json
- index
- 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/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
-
- 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
- G06F16/2453—Query optimisation
-
- 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
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- 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)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了JSON数据存储和访问方法、装置、计算机设备及介质,涉及数据处理技术领域,其中,存储方法包括以下步骤:接收并缓存JSON数据,形成数据块;分析数据块内的数据模式,确定数据类型;根据数据块的各列的空值位置生成bitmap并建立索引;根据数据块的各列的数据类型和数据特征,对各列进行自适应编码和压缩;将bitmap、索引、数据类型和压缩后的各列数据序列化并写入到文件中。由于该方案通过使用bitmap记录各列的空值位置,在访问时通过bitmap还原各列的完整数据,以及各列分别采用自适应编码和压缩,提高了访问效率,从而实现高压缩率、快速的列存访问和点查能力。
Description
技术领域
本发明涉及数据处理技术领域,特别涉及一种JSON数据存储和访问方法、装置、计算机设备及介质。
背景技术
关系型数据库在不断吸收新的技术中成长,其性能、适应范围也在不断扩大,它仍然是现在最主要的数据管理模式。受益于数据技术发展快速,数据驱动的业务也不断演进,如何在关系型数据库管理好模式不断变化的数据就成为一个重要问题。一方面是需要将不同种类的数据源源不断进来,另一方面是数据模式也随着时间而变化。如果以传统的固定属性的列来存储,当模式发生变化时,需要增减列,这要求数据管理员能预先知道数据模式的变化,但现实中往往难以做到。另一方面,增减列的开销巨大。
JSON是存此类数据的一种主要选择,它是一种嵌套的数据结构,支持非常灵活的层次。但相对于固定的属性列,JSON存储面临效率问题。一方面,它需要存储大量重复的key值;另一方面,它本质上是打破了列的概念,将所有列混在一起存储。无法利用当下流行的列存高压缩率,按列高效存储的优势。关系数据库针对JSON做了大量优化,但仍存在上述缺点。以 PostgreSQL这一业界最强的开源关系数据库为例,它的JSON类型以明文方式存储JSON,即使以编码过的JSONB方式存储,也面临无法按列存储和优化的结果。
发明内容
有鉴于此,本发明实施例提供了一种JSON数据存储方法,以解决了现有技术中JSON数据存储占用空间大和数据的访问效率低的问题。该方法包括:
接收并缓存JSON数据,形成数据块;
分析所述数据块内的数据模式,确定数据类型;
根据所述数据块的各列的空值位置生成bitmap并建立索引;
根据所述数据块的各列的数据类型和数据特征,对各列进行自适应编码和压缩;
将所述bitmap、所述索引、所述数据类型和压缩后的各列数据,序列化并写入到文件中。
本发明实施例还提供了一种JSON数据访问方法,所述方法包括:
接收查询条件;
若所述查询条件为key值,找到所述key值对应的列,根据数据类型对压缩后的整列数据进行还原,再根据bitmap和bitmap的索引还原出包含空值在内的整列数据;
若所述查询条件为非key值,则将整个数据块进行解压,再过滤得到与所述查询条件相应的值。
本发明实施例还提供了一种JSON数据存储装置,以解决了现有技术中JSON数据存储占用空间大和数据的访问效率低的问题。该装置包括:
接收缓存模块,用于接收并缓存JSON数据,形成数据块;
分析模块,用于分析所述数据块内的数据模式,确定数据类型;
bitmap生成模块,用于根据所述数据块的各列的空值位置生成bitmap并建立索引;
压缩模块,用于根据所述数据块的各列的数据类型和数据特征,对各列进行自适应编码和压缩;
写入模块,用于对所述bitmap、所述索引和压缩后的各列数据,序列化并写入到文件中。
本发明实施例还提供了一种JSON数据访问装置,包括:
接收模块,用于接收查询条件;
第一访问模块,用于若所述查询条件为key值,找到所述key值对应的列,根据数据类型对压缩后的整列数据进行还原,再根据bitmap和bitmap的索引还原出包含空值在内的整列数据;
第二访问模块,用于若所述查询条件为非key值,则将整个数据块进行解压,再过滤得到与所述查询条件相应的值。
本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意的JSON数据存储方法,和/或,所述处理器执行所述计算机程序时实现上述任意的JSON数据访问方法,以解决了现有技术中JSON数据存储占用空间大和数据的访问效率低的技术问题。
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的JSON数据存储方法的计算机程序,和/或,所述计算机可读存储介质存储有执行上述任意的JSON数据访问方法的计算机程序,以解决了现有技术中JSON数据存储占用空间大和数据的访问效率低的技术问题。
与现有技术相比,本说明书实施例采用的上述至少一个技术方案能够达到的有益效果至少包括:接收并缓存JSON数据,并分析JSON数据模式,确定数据类型,进一步的根据JSON数据的各列的空值位置生成bitmap并建立索引,进而根据JSON数据的各列的数据类型和数据特征,对各列进行自适应编码和压缩,最后将所述bitmap、所述索引、所述数据类型和压缩后的各列数据序列化并写入到文件。实现了在列上采用列特征的专门压缩效果,配合缓存的使用,一列数据的访问仅需要一次I/O;另外,表格式的存储方式减少了类似JSON这样的复杂的编码和路径访问,实现了数据的高效访问。相比于直接将JSON数据的key值和value值作为明文存储,采用通用算法压缩,以及直接对单行数据进行编码的方式,本申请的方法实现高压缩率、快速的列存访问和点查能力,节省用户成本,提高系统性能。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本发明实施例提供的一种JSON数据的逻辑表示图;
图2是本发明实施例提供的一种JSON数据的存储方法的流程图;
图3是本发明实施例提供的一种JSON数据的存储形式的结构图;
图4是本发明实施例提供的一种JSON数据的访问方法的流程图;
图5是本发明实施例提供的计算机设备的结构框图;
图6是本发明实施例提供的JSON数据的存储装置的结构框图;
图7是本发明实施例提供的JSON数据的访问装置的结构框图。
具体实施方式
下面结合附图对本申请实施例进行详细描述。
以下通过特定的具体实例说明本申请的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本申请的其他优点与功效。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。本申请还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本申请的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
对数据的相关的概念如下:
JSON:以JSON格式描述key-value数据,如{"product": "postgres" , "version":12 .3},加载数据时会直接保存如上的JSON文本,每次读取时进行完整的语法解析,并根据查询需要输出部分或全部内容。
JSONB:同样以JSON格式描述key-value数据,加载数据时会进行语法解析,并转换成一种二进制格式后保存至磁盘,二进制格式不需要完整的语法解析即可对key进行遍历。
对于JSON数据的key-value存储,衡量其性能的指标包括:
查询性能,对已经以相应的key-value格式保存至磁盘上的数据查询其中某个key所对应的value,用时越少则查询性能越好。
压缩性能(压缩比),同样的原始数据量转换至相应的key-value格式用同样的压缩算法进行压缩,压缩后的体积越小则压缩比越高,可压缩性越好,简称压缩性能。
按照 PostgreSQL官方文档的说明,即使采用JSON,也建议用户采取尽量固定的方式,以优化性能。实现应用中,往往数据模式在一段时间里是确定的,当模式变动后会稳定一段时间。对于某些数据采集场景,它在相邻的时间里,也往往有一定的确定性。比如,用户有1600列数据,打成一个包上传会很大,因此会将一条记录分成4次上传。然后再传下一条记录。这样某些记录行上就会有相同的400列数据。因此,采用一层结构是JSON的一种非常常用的模式,它的逻辑表示可以参见图1。
在图1中,为方便描述,这里用kvx(x为整数)表示JSON数据里的一个key-value的组合。在不同行上,相同的key对应于不同的value,有些行允许缺失某些key,缺失的地方即为空值。
在本发明实施例中,提供了一种JSON数据存储方法,在列上得到采用列特征的专门压缩效果,取得了最好的空间效率。
如图2所示,该方法包括:
步骤S101、接收并缓存JSON数据,形成数据块;
步骤S102、分析所述数据块内的数据模式,确定数据类型;
步骤S103、根据所述数据块的各列的空值位置生成bitmap并建立索引;
步骤S104、根据所述数据块的各列的数据类型和数据特征,对各列进行自适应编码和压缩;
步骤S105、将所述bitmap、所述索引、所述数据类型和压缩后的各列数据,序列化并写入到文件中。
由图2所示的流程可知,在本发明实施例中,利用bitmap记录数据块中各列的空值位置,并对各列分别采用自适应编码和压缩,存储时可以使用更小的空间;通过使用bitmap记录各列的空值位置,在访问时通过bitmap还原各列的完整数据,提高了访问效率,从而实现高压缩率、快速的列存访问和点查能力。配合缓存的使用,一列数据的访问仅需要一次I/O。另外,以表格式的方式进行存储减少了类似JSON这样的复杂的编码和路径访问,实现了数据的高效存储和访问。
具体实施时,在步骤S101中,数据库持续接收key-value数据,以任意格式暂时缓存,等攒够一批数据,然后启动后续的数据处理流程。一批数据存储在一个数据块里,数据的逻辑模式如图1所示,数据块的起始地址和大小由外部索引。
具体实施时,为了进一步提高压缩效率,在分析数据块内的数据模式,确定数据类型过程中,根据每列数据的数值范围,采用该数值范围对应的进制数的最小位宽表示每列的数据类型。数据类型包括Boolean类型、Byte类型、短整型、整型、长整型、字符串类型、键值对类型、数组类型和空值类型等。例如,以数据块中的一列整型值为例,虽然在某些数据块中该列的数据范围可能超过了65536,需要用32位及以上表示,但如果该列在本数据块中的数据范围小于65536,则可以用16位及以下的整数表示,通过此种方式进一步的节省存储空间。
在一个实施例中,为了进一步对数据压缩,对于根据数据块内的各列的空值位置生成bitmap并建立索引的步骤中,具体包括:根据所述数据块内的各列的空值位置生成bitmap;对所述数据块内的各列建立bitmap的索引,对于bitmap相同的列采用相同的索引。换句话也就是说,根据bitmap是否相同建立唯一性索引,即后续的bitmap指针指向对应的bitmap。
例如,在一个数据块中用0记录某个位置不是空值,用1表示某个位置有空值,对于一个6列的数据,这6列的bitmap依次分别为1010,1010,1010,0101,0101,0111。因此,不重的bitmap为1010,0101,0111,前3列数据的bitmap指针只要指向1010即可,第4列和第5列的bitmap指针只要指向0101即可,第6列的bitmap指针指向0111即可。因此,通过对bitmap的压缩,实现存储空间的进一步有效利用,提高存储效率。
在一个实施例中,在步骤S102之前,还包括以下步骤:建立内存中的索引表,维护所述数据块的key值的map,针对每行数据,如果出现一个新的key值,则增加map中的一位,并填充相关的空值;如果在一行数据中缺失对应的key值,则填充相关的空值。在本过程就是要找齐在本数据块里出现的所有列,并补齐空值。
在一个实施例中,在步骤S105之前,还包括以下步骤:将所述数据块的列数、行数、key值集合和offset数组序列化并写入到文件中,所述offset数组用于记录各个列的起始位置。
具体实施时,参照图3所示的表格形式进行存储,colnr和recordnr分别表示列数和记录数(行数);key coding指通过编码的key值集合;offset数组是一个包含colnr个值的数组,它记录了每个列块的起始位置;bitmap记录一列数据中哪些位置是空值,不同列的bitmap可能会相同,因此分别记录了不同bitmap数组;bitmapsize记录bitmap的大小;对于每一个列块,首先记录bitmap的指针(bitmap_ptrn,即bitmap的索引),key值的名字和数据类型(coltype),然后紧跟着的是数据块(压缩的列数据),各列数据根据数据类型及数据的特征进行编码压缩。因此,表格的第一行依次包括colnr、recordnr、key coding、offset数组,第二行依次包括bitmapsize和bitmap数组,第三行及之后各行均依次包括了bitmap_ptrn、coltype和压缩的列数据,序列化时从第一行开始依次进行并写入文件。
具体实施时,key值集合可以采取字典编码,以减少体积,进一步提高了压缩率。
具体实施时,将上述得到的信息以图3所示的格式序列化并写入到文件中之后,将得到的文件位置写入索引文件。
在一个实施例中,考虑跨数据块的优化。由于key值集合组合相对固定,多个数据数据块的key值集合可再次进行去重编码,编码后的key值集合和offset数组一起作为元数据缓存起来,加速查询。这样对于一列数据的访问,只需要一次I/O即可完成,实现了数据的高效访问。
下面参照具体实施方式对本申请的JSON数据存储方法进行详细介绍,具体包括以下步骤。
步骤一,收到的数据如下,Ri表示一条记录。
R1:{‘指标1’:’100’,‘指标2’:’50’,‘指标3’:’10’,‘指标4’:’200’}
R2:{‘指标5’:’100’,‘指标6’:’50’,‘指标7’:’10’,‘指标8’:’200’}
R3:{‘指标1’:’101’,‘指标2’:’51’,‘指标3’:’11’,‘指标4’:’201’}
R4:{‘指标5’:’101’,‘指标6’:’51’,‘指标7’:’11’,‘指标8’:’201’}
在本步骤中,指标1、指标2、指标3、指标4、指标5、指标6、指标7和指标8为key值,100、50、10、200、101、51、11、201为各个key值对应的value值。
步骤二、找出所有的key值,并建立bitmap关系(建立内存中的索引表)。从上面找到的指标为‘指标1’,‘指标2’.......‘指标8’。
步骤三,逐列分析数据模式,确定数据类型及宽度。从上面的数据来看,都是小于256的整数,因此用8b的整数表示即可。
步骤四,根据数据块的各列的空值位置生成bitmap并建立索引。上述8列值对应的bitmap为1010, 1010, 1010, 1010和0101,0101,0101, 0101。因此不重的bitmap为1010和0101,其它的bitmap指针只要指要这两个值即可。
步骤五,根据各列数据类型和数据特征进行自适应列编码和压缩。由于按列存储,以第一列为例,去掉空值后的值为100,101,如果后续值为102,103等可以采取 double-delta的编码方法,将数据压到极小。
步骤六,将上述步骤得到的数据按以上格式写到文件里。
本申请还提供一种JSON数据访问方法,参照图4,访问方法包括以下步骤:
步骤S201、接收查询条件;
步骤S202、若所述查询条件为key值,找到所述key值对应的列,根据数据类型对压缩后的整列数据进行还原,再根据bitmap和bitmap的索引还原出包含空值在内的整列数据;
步骤S203、若所述查询条件为非key值,则将整个数据块进行解压,再过滤得到与所述查询条件相应的值。
具体实施时,如果输入的查询条件是key值,则从数据块的头部找到offset数据,offset数据记录各个列的起始位置,根据数据类型就可以还原出整个列块的数据,再根据bitmap和bitmap的索引还原出包含空值在内的整列数据。
具体实施时,由于采用了高效的方式,除了在列上得到采用列特征的专门压缩效果外,还在bitmap,key值集合上均有进一步的压缩,从而取得最好的空间效率。配合缓存的使用,一列数据的访问仅需要一次I/O。另外,表格式的存储方式减少了类似JSON这样的复杂的编码和路径访问,实现了数据的高效访问。相比于直接将kv作为明文存储,采用通用算法压缩,以及直接对单行数据进行编码的方式,本申请的方法可以使用更少的空间和更快速的访问。
在本实施例中,提供了一种计算机设备,如图5所示,包括存储器501、处理器502及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意的JSON数据存储方法;和/或,JSON数据访问方法。
具体的,该计算机设备可以是计算机终端、服务器或者类似的运算装置。
在本实施例中,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的JSON数据存储方法;和/或,JSON数据访问方法的计算机程序。
具体的,计算机可读存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机可读存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读存储介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
基于同一发明构思,本发明实施例中还提供了一种JSON数据存储装置,如下面的实施例所述。由于JSON数据存储装置解决问题的原理与JSON数据存储方法相似,因此JSON数据存储装置的实施可以参见JSON数据存储方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图6是本发明实施例的JSON数据存储装置的一种结构框图,如图6所示,包括:
接收缓存模块601,用于接收并缓存JSON数据,形成数据块;
分析模块602,用于分析所述数据块内的数据模式,确定数据类型;
bitmap生成模块603,用于根据所述数据块的各列的空值位置生成bitmap并建立索引;
压缩模块604,用于根据所述数据块的各列的数据类型和数据特征,对各列进行自适应编码和压缩;
写入模块605,用于对所述bitmap、所述索引和压缩后的各列数据,序列化并写入到文件中。
在一个实施例中,分析模块602用于逐列分析所述数据块内的数据模式,根据每列数据的数值范围,采用该数值范围对应的进制数的最小位宽表示每列的数据类型。
在一个实施例中,bitmap生成模块603用于根据所述数据块内的各列的空值位置生成bitmap;对所述数据块内的各列建立bitmap的索引,对于bitmap相同的列采用相同的索引。
在一个实施例中,JSON数据存储装置还包括索引表建立模块,用于建立内存中的索引表,维护所述数据块的key值的map,针对每行数据,如果出现一个新的key值,则增加map中的一位,并填充相关的空值;如果在一行数据中缺失对应的key值,则填充相关的空值。
在一个实施例中,所述写入模块,还用于将所述数据块的列数、行数、key值集合和offset数组序列化并写入到文件中,所述offset数组用于记录各个列的起始位置。
在一个实施例中,JSON数据存储装置还包括第一压缩子模块,用于对key值集合进行字典编码。
在一个实施例中,JSON数据存储装置还包括第二压缩子模块,用于对于多个数据块的key值集合,再次进行去重编码,编码后的key值集合和offset数组一起作为元数据进行缓存。
图7是本发明实施例的JSON数据访问装置的一种结构框图,如图7所示,包括:
接收模块701,用于接收查询条件;
第一访问模块702,用于若所述查询条件为key值,找到所述key值对应的列,根据数据类型对压缩后的整列数据进行还原,再根据bitmap和bitmap的索引还原出包含空值在内的整列数据;
第二访问模块703,用于若所述查询条件为非key值,则将整个数据块进行解压,再过滤得到与所述查询条件相应的值。
本发明实施例实现了如下技术效果:通过采用如下方法:接收并缓存JSON数据,并分析JSON数据模式,确定数据类型,进一步的根据JSON数据的各列的空值位置生成bitmap并建立索引,进而根据JSON数据的各列的数据类型和数据特征,对各列进行自适应编码和压缩,最后将所述bitmap、所述索引、所述数据类型和压缩后的各列数据序列化并写入到文件。实现了在列上采用列特征的专门压缩效果,配合缓存的使用,一列数据的访问仅需要一次I/O;另外,表格式的存储方式减少了类似JSON这样的复杂的编码和路径访问,实现了数据的高效访问。相比于直接将JSON数据的key值和value值作为明文存储,采用通用算法压缩,以及直接对单行数据进行编码的方式,本申请的方法实现高压缩率、快速的列存访问和点查能力,节省用户成本,提高系统性能。
显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种JSON数据存储方法,其特征在于,包括:
接收并缓存JSON数据,形成数据块;
分析所述数据块内的数据模式,确定数据类型,包括:逐列分析所述数据块内的数据模式,根据每列数据的数值范围,采用该数值范围对应的进制数的最小位宽表示每列的数据类型;
根据所述数据块的各列的空值位置生成bitmap并建立索引,包括:根据所述数据块内的各列的空值位置生成bitmap;对所述数据块内的各列建立bitmap的索引,对于bitmap相同的列采用相同的索引;
根据所述数据块的各列的数据类型和数据特征,对各列进行自适应编码和压缩;
将所述bitmap、所述索引、所述数据类型和压缩后的各列数据,序列化并写入到文件中。
2.如权利要求1所述JSON数据存储方法,其特征在于,在所述分析所述数据块内的数据模式,确定数据类型之前,还包括:建立内存中的索引表,维护所述数据块的key值的map,针对每行数据,如果出现一个新的key值,则增加map中的一位,并填充相关的空值;如果在一行数据中缺失对应的key值,则填充相关的空值。
3.如权利要求1所述JSON数据存储方法,其特征在于,在所述将所述bitmap、所述索引、所述数据类型和压缩后的各列数据,序列化并写入到文件中之前,还包括:
将所述数据块的列数、行数、key值集合和offset数组序列化并写入到文件中,所述offset数组用于记录各个列的起始位置。
4.如权利要求3所述JSON数据存储方法,其特征在于,所述key值集合采用字典编码。
5.如权利要求3所述JSON数据存储方法,其特征在于,所述方法还包括:对于多个数据块的key值集合,再次进行去重编码,编码后的key值集合和offset数组一起作为元数据进行缓存。
6.一种JSON数据访问方法,其特征在于,所述方法包括:
接收查询条件;
若所述查询条件为key值,找到所述key值对应的列,根据数据类型对压缩后的整列数据进行还原,再根据bitmap和bitmap的索引还原出包含空值在内的整列数据;
若所述查询条件为非key值,则将整个数据块进行解压,再过滤得到与所述查询条件相应的值。
7.一种JSON数据存储装置,其特征在于,包括:
接收缓存模块,用于接收并缓存JSON数据,形成数据块;
分析模块,用于分析所述数据块内的数据模式,确定数据类型,包括:逐列分析所述数据块内的数据模式,根据每列数据的数值范围,采用该数值范围对应的进制数的最小位宽表示每列的数据类型;
bitmap生成模块,用于根据所述数据块的各列的空值位置生成bitmap并建立索引,包括:根据所述数据块内的各列的空值位置生成bitmap;对所述数据块内的各列建立bitmap的索引,对于bitmap相同的列采用相同的索引;
压缩模块,用于根据所述数据块的各列的数据类型和数据特征,对各列进行自适应编码和压缩;
写入模块,用于对所述bitmap、所述索引和压缩后的各列数据,序列化并写入到文件中。
8.一种JSON数据访问装置,其特征在于,包括:
接收模块,用于接收查询条件;
第一访问模块,用于若所述查询条件为key值,找到所述key值对应的列,根据数据类型对压缩后的整列数据进行还原,再根据bitmap和bitmap的索引还原出包含空值在内的整列数据;
第二访问模块,用于若所述查询条件为非key值,则将整个数据块进行解压,再过滤得到与所述查询条件相应的值。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至5中任一项所述的JSON数据存储方法;和/或,
所述处理器执行所述计算机程序时实现权利要求6所述的JSON数据访问方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1至5中任一项所述的JSON数据存储方法的计算机程序;和/或,
所述计算机可读存储介质存储有执行权利要求6所述的JSON数据访问方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310505588.5A CN116244313B (zh) | 2023-05-08 | 2023-05-08 | Json数据存储和访问方法、装置、计算机设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310505588.5A CN116244313B (zh) | 2023-05-08 | 2023-05-08 | Json数据存储和访问方法、装置、计算机设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116244313A CN116244313A (zh) | 2023-06-09 |
CN116244313B true CN116244313B (zh) | 2023-07-21 |
Family
ID=86624597
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310505588.5A Active CN116244313B (zh) | 2023-05-08 | 2023-05-08 | Json数据存储和访问方法、装置、计算机设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116244313B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116955403B (zh) * | 2023-09-21 | 2023-12-26 | 北京四维纵横数据技术有限公司 | 无模式数据运算加速方法、装置、计算机设备及介质 |
CN116955363B (zh) * | 2023-09-21 | 2023-12-26 | 北京四维纵横数据技术有限公司 | 无模式数据创建索引方法、装置、计算机设备及介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109726225B (zh) * | 2019-01-11 | 2023-08-01 | 广东工业大学 | 一种基于Storm的分布式流数据存储与查询方法 |
US11868348B2 (en) * | 2019-09-12 | 2024-01-09 | Oracle International Corporation | Hardware friendly key value table design to support relational hash join |
CN111680035B (zh) * | 2020-05-07 | 2023-09-08 | 中国工业互联网研究院 | 一种针对网络流数据及其位图索引压缩编码及解码方法 |
CN115698978A (zh) * | 2020-07-24 | 2023-02-03 | 阿里巴巴集团控股有限公司 | 通过列式存储格式的全面位图索引进行高效扫描 |
CN113704261B (zh) * | 2021-08-26 | 2024-05-24 | 平凯星辰(北京)科技有限公司 | 基于云存储的键值存储系统 |
CN115630100A (zh) * | 2022-09-21 | 2023-01-20 | 清华大学 | 单元和多元时序数据的混合处理方法、装置及计算机设备 |
-
2023
- 2023-05-08 CN CN202310505588.5A patent/CN116244313B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN116244313A (zh) | 2023-06-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116244313B (zh) | Json数据存储和访问方法、装置、计算机设备及介质 | |
CN106570018B (zh) | 序列化与反序列化的方法、装置、系统以及电子设备 | |
Wu | Notes on design and implementation of compressed bit vectors | |
CN107391544B (zh) | 列式存储数据的处理方法、装置、设备及计算机储存介质 | |
JP3992495B2 (ja) | トリー構造に基づく機能的メモリ | |
CN110196847A (zh) | 数据处理方法和装置、存储介质及电子装置 | |
CN107741947B (zh) | 基于hdfs文件系统的随机数密钥的存储与获取方法 | |
CN102880615A (zh) | 一种数据存储方法和装置 | |
CN116594572B (zh) | 浮点数流式数据压缩方法、装置、计算机设备及介质 | |
CN114153848B (zh) | 区块链数据存储方法及装置、电子设备 | |
CN112988909B (zh) | 区块链数据存储方法及装置、电子设备 | |
CN111510156A (zh) | 一种基于分段的哈夫曼动态压缩及解压大文件的方法 | |
KR20030071327A (ko) | 개선된 허프만 디코딩 방법 및 장치 | |
CN114138792A (zh) | 一种Key-value分离存储方法及系统 | |
CN116756253B (zh) | 关系型数据库的数据存储、查询方法、装置、设备和介质 | |
CN117370488A (zh) | 数据处理方法、装置、电子设备和计算机可读存储介质 | |
CN104111899A (zh) | 一种缓存数据的存储方法及系统及读取方法 | |
CN115774699A (zh) | 数据库共享字典压缩方法、装置、电子设备及存储介质 | |
CN116185305A (zh) | 业务数据存储方法、装置、计算机设备和存储介质 | |
CN107436848B (zh) | 一种实现用户数据和压缩数据间转换的方法及装置 | |
CN115809248A (zh) | 数据查询方法和装置以及存储介质 | |
US20230223954A1 (en) | Inline decompression | |
CN112015325A (zh) | 一种生成解码矩阵的方法、解码方法和对应装置 | |
CN117335811A (zh) | 列数据压缩方法及装置、存储介质 | |
CN116975067B (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 |