CN109582231B - 数据存储方法、装置、电子设备及存储介质 - Google Patents

数据存储方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN109582231B
CN109582231B CN201811387710.9A CN201811387710A CN109582231B CN 109582231 B CN109582231 B CN 109582231B CN 201811387710 A CN201811387710 A CN 201811387710A CN 109582231 B CN109582231 B CN 109582231B
Authority
CN
China
Prior art keywords
data
type
data object
storage
memory
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
CN201811387710.9A
Other languages
English (en)
Other versions
CN109582231A (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.)
Golden Panda Ltd
Original Assignee
Golden Panda 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 Golden Panda Ltd filed Critical Golden Panda Ltd
Priority to CN201811387710.9A priority Critical patent/CN109582231B/zh
Publication of CN109582231A publication Critical patent/CN109582231A/zh
Application granted granted Critical
Publication of CN109582231B publication Critical patent/CN109582231B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices

Abstract

本发明的实施例提供了一种数据存储方法、装置、电子设备及存储介质,涉及大数据技术领域。该方法包括:获取JSON数据,解析所述JSON数据并确定所述JSON数据中的数据对象的数据类型;基于所述数据对象的数据类型通过预定内存单元存储所述数据对象,该预定内存单元包括数据类型存储部分以及数据存储部分。本发明实施例的技术方案能够显著减少JSON数据加载后的内存占用大小,提高系统性能。

Description

数据存储方法、装置、电子设备及存储介质
技术领域
本发明涉及大数据技术领域,具体而言,涉及一种数据存储方法、数据存储装置、电子设备以及计算机可读存储介质。
背景技术
JSON(JavaScript Object Notion,JS对象简谱)是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。JSON易于阅读和编写,同时也易于机器解析和生成,并有效地提升了网络传输效率。在医疗大数据领域,由于JSON的灵活性和易于程序处理,被广泛应用于病历和患者数据的存储、传输。
目前,若要对JSON数据进行处理,一般要经历:从文件(或数据库)读取序列化后的JSON数据=>将JSON数据反序列化到内存数据结构=>在内存中计算、修改JSON数据=>序列化JSON数据=>将JSON数据写回文件(或数据库)这5个步骤。为了便于内存中的计算和修改,JSON的内存数据结构通常和文件中纯文本的存储形态非常不同,带来很多额外的开销,内存占用往往是纯文本形态的几倍甚至十几倍。
在医疗数据处理场景下,单个患者数据分布极不均匀,个别患者数据可达几百MB,将表示患者数据的JSON数据加载到内存中可能占用几GB内存。在大数据处理的场景下,单个患者或病历内存占用过大,会导致系统可同时并发执行任务数下降,严重降低系统性能。
因此,优化JSON数据内存存储占用成为医疗大数据处理中亟待解决的技术问题。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本发明背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本发明实施例的目的在于提供一种数据存储方法、数据存储装置、电子设备以及计算机可读存储介质,进而至少在一定程度上克服由于相关技术的限制和缺陷而导致的一个或者多个问题。
根据本发明实施例的第一方面,提供了一种数据存储方法,包括:获取JSON数据,解析所述JSON数据并确定所述JSON数据中的数据对象的数据类型;基于所述数据对象的数据类型通过预定内存单元存储所述数据对象,所述预定内存单元包括数据类型存储部分以及数据存储部分。
在本发明的一些实施例中,基于前述方案,基于所述数据对象的数据类型通过预定内存单元存储所述数据对象,包括:在所述数据对象的数据类型为短字符串型、空值型、布尔型、整数型、浮点型中的一种数据类型时,通过所述数据类型存储部分存储所述数据对象的数据类型;通过所述数据存储部分存储所述数据对象的值,所述短字符串型的字符串的长度小于8个字节。
在本发明的一些实施例中,基于前述方案,基于所述数据对象的数据类型通过预定内存单元存储所述数据对象,包括:在所述数据对象的数据类型为长字符串型、数组型、对象型中的一种数据类型时,通过所述数据类型存储部分存储所述数据对象的数据类型;通过所述数据存储部分存储所述数据对象的元信息的指针,所述指针指向所述数据对象的元信息的内存存储地址,所述长字符串型的字符串的长度大于等于8个字节。
在本发明的一些实施例中,基于前述方案,所述数据存储方法还包括:在所述数据对象的数据类型为所述数组型或所述对象型时,在内存栈上构造所述数据对象;将在所述内存栈上构造的所述数据对象存储在所述内存存储地址中。
在本发明的一些实施例中,基于前述方案,所述数据存储方法还包括:对所述对象型数据的关键字进行去重,通过全局关键字缓存存储去重后的所述对象型数据的关键字。
在本发明的一些实施例中,基于前述方案,所述数据存储方法还包括:通过内存池分配所述数据对象的存储单元;在所述内存池中的所有数据对象都不再使用时,一次性释放所述内存池中的所有数据对象占用的内存。
在本发明的一些实施例中,基于前述方案,所述数据类型存储部分为4位存储单元以及所述数据存储部分为60位存储单元。
在本发明的一些实施例中,基于前述方案,基于所述数据对象的数据类型通过预定内存单元存储所述数据对象,包括:在所述数据对象的数据类型为双精度浮点型时,通过所述数据类型存储部分存储所述数据对象的数据类型;通过所述数据存储部分的第1位存储所述数据对象的符号,第2位至第12位存储所述数据对象的指数部分,第12位至第60位存储所述数据对象的小数部分。
在本发明的一些实施例中,基于前述方案,所述数据存储方法还包括:通过第1位至第7位存储所述长字符串型的字符串的长度,通过第8位表示当前字节是否是最后一个字节。
根据本发明实施例的第二方面,提供了一种数据存储装置,包括:数据对象获取单元,用于获取JSON数据,解析所述JSON数据并确定所述JSON数据中的数据对象的数据类型;数据存储单元,用于基于所述数据对象的数据类型通过预定内存单元存储所述数据对象,所述预定内存单元包括数据类型存储部分以及数据存储部分。
根据本发明实施例的第三方面,提供了一种电子设备,包括:处理器;以及存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时实现如上述第一方面所述的数据存储方法。
根据本发明实施例的第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述第一方面所述的数据存储方法。
在本发明的一些实施例所提供的技术方案中,一方面,解析所述JSON数据并确定所述JSON数据中的数据对象的数据类型,能够获取JSON数据的数据对象的数据类型以及数据对象的数据值;另一方面,基于数据对象的类型通过预定内存单元存储数据对象,能够通过数据类型存储部分例如4位存储单元存储该数据对象的数据类型,通过所述数据存储部分例如60位存储单元存储该数据对象的数据值,从而能够显著减少JSON数据加载后的内存占用大小,提高系统性能。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示出了一种技术方案中的JSON数据的存储结构的示意图;
图2示出了一种技术方案中的JSON数据中的数组的存储结构的示意图;
图3示出了一种技术方案中的JSON数据中的对象数据的存储结构的示意图;
图4示出了根据本发明的一些实施例的数据存储方法的流程示意图;
图5示出了根据本发明的一些实施例的JSON数据的存储结构的示意图;
图6示出了根据本发明的一示例性实施例的数据存储装置的示意框图;
图7示出了适于用来实现本发明实施例的电子设备的计算机系统的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本发明将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本发明的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本发明的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
把JSON数据反序列化到内存中,一般有两种做法:
(1)使用通用树型数据结构;由JSON数据的定义可知它逻辑上是一棵树,因此使用通用的树型数据结构作为JSON的内存存储是最常使用的方法。如图1所示,JSON数据可以按如下方式递归定义:JSON数值JSON Value可以是以下7种之一:string/number/object/array/true/false/null。如图2所示,JSON数据中的数组Array的存储结构是0个或多个JSON Value的列表;如图3所示,JSON数据中的对象数据Object的存储结构是0个或多个字符串String到JSON数值JSON Value的映射。
当前JSON库反序列化后的通用树型数据结构一般不针对内存占用做优化,其更多考虑易用性或序列化/反序列化性能。内存占用一般比原始数据大几倍到十几倍。例如:Python/PHP反序列化后使用python/PHP语言自身的字符串、数字、布尔、数组、字典对象表达JSON对象。JsonCPP反序列化后使用C++中标准库中的map存储JSON中的object。这些都不是专门为内存极致优化设计的数据结构。即使在JSON库中以优化出名的RapidJSON,单个JSON Value的内存占用仍然达到24字节(在64位操作系统下)。
(2)使用用户自定义数据结构
也可以把JSON文本反序列化到用户自定义的数据结构中,这种方式一般称为DataBinding(数据绑定)。由于用户可以根据具体数据schema(模式)自定义数据结构,内存开销可以做得比较小。但这种方式在编码时就确定了数据的schema,它会损失JSON的灵活性,在数据schema宽松的医疗大数据场景下不是很适用。
基于上述内容,在本发明的示例实施例中,首先提出了一种数据存储方法。参照图4所示,该数据存储方法可以包括以下步骤:
步骤S410,获取JSON数据,解析所述JSON数据并确定所述JSON数据中的数据对象的数据类型;
步骤S420,基于所述数据对象的类型通过预定内存单元存储所述数据对象,所述预定内存单元包括数据类型存储部分以及数据存储部分。
根据图4的示例实施例中的数据存储方法,一方面,解析所述JSON数据并确定所述JSON数据中的数据对象的数据类型,能够获取JSON数据的数据对象的数据类型以及数据对象的数据值;另一方面,基于数据对象的类型通过预定内存单元存储数据对象,能够通过数据类型存储部分例如4位存储单元存储该数据对象的数据类型,通过所述数据存储部分例如60位存储单元存储该数据对象的数据值,从而能够显著减少JSON数据加载后的内存占用大小,提高系统性能。
下面,将对图4的示例实施例中的数据存储方法进行详细的说明。
在步骤S110中,获取JSON数据,解析所述JSON数据并确定所述JSON数据中的数据对象的数据类型。
在示例实施例中,获取序列化后的JSON数据即JSON字符串,对获取到的JSON数据进行解析即反序列化处理,确定JSON数据中的数据对象的数据类型以及数据值。
例如,JSON数据可以为:
Figure BDA0001873305520000061
Figure BDA0001873305520000071
在解析时出现【“】符号时,可以确定要解析的数据对象的数据类型为字符串类型;在解析时出现【n】符号时,可以确定要解析的数据对象的数据类型为空值类型;在解析时出现【t】符号时,可以确定要解析的数据对象的数据类型为布尔类型即true;在解析时出现【+】、【-】、【.】符号时,可以确定要解析的数据对象的数据类型为字符串类型;在解析时出现【[】符号时,可以确定要解析的数据对象的数据类型为数组类型;在解析时出现【{】符号时,可以确定要解析的数据对象的数据类型为对象类型。
在步骤S420中,基于所述数据对象的数据类型通过预定内存单元存储所述数据对象,所述预定内存单元包括数据类型存储部分以及数据存储部分。
在示例实施例中,在所述数据对象的数据类型为短字符串型、空值型、布尔型、整数型、浮点型中的一种数据类型时,通过所述数据类型存储部分存储所述数据对象的类型;通过所述数据存储部分存储所述数据对象的值,所述短字符串型的字符串的长度小于8个字节。其中,所述数据类型存储部分为4位存储单元以及所述数据存储部分为60位存储单元。
此外,在示例实施例中,在所述数据对象的数据类型为长字符串型、数组型、对象型中的一种数据类型时,通过所述数据类型存储部分存储所述数据对象的类型;通过所述数据存储部分存储所述数据对象的元信息的指针,所述指针指向所述数据对象的元信息的内存存储地址,所述长字符串型的字符串的长度大于等于8个字节。
进一步地,在示例实施例中,在所述数据对象的数据类型为所述数组型或所述对象型时,在内存栈上构造所述数据对象;将在所述内存栈上构造的所述数据对象存储在所述内存存储地址中。
此外,在一些实施例中,可以通过内存池分配所述数据对象的存储单元;在所述内存池中的所有数据对象都不再使用时,一次性释放所述内存池中的所有数据对象占用的内存。
图5示出了根据本发明的一些实施例的JSON数据的存储结构的示意图。
参照图5所示,在示例实施例中,使用64bit表示从JSON数据中解析的任意的数据对象即JSONValue(JSON数值)。其中,4bit用于表示该JSON数值的数据类型即标识flag,剩余60bit根据标识flag的不同表示不同含义,其中:flag为0:表示短字符串型(长度小于8字节的字符串);flag为1:表示普通字符串型(剩余60bit存储指向字符串的指针);flag为2:表示Null(剩余60bit无用);flag为3:表示False(剩余60bit无用);flag为4:表示True(剩余60bit无用);flag为5:表示整数类型(使用剩余60bit存储整数);flag为6:表示浮点类型(使用剩余60bit存储浮点数);flag为7:表示对象类型即Object(使用剩余60bit存储指向Object元信息的指针);flag为8:表示数组型即Array(使用剩余60bit存储指向Array元信息的指针)。
此外,在示例实施例中,还可以通过一些以下方式对从JSON数据中解析的数据对象即JSON数值内存占用进行进一步的优化。
短字符串优化
经过统计,JSON数据中经常含有大量非常短的字符串,例如“none”、“ok”、“success”、“男”等。如果使用额外专门分配的内存存储这些字符串,需要浪费额外空间。因此,在示例实施例中,可以把小于8字节的字符串通过JSON Value中剩余的60bit存储,不需要任何额外空间。其中,60bit中的高4bit用于存储字符串长度,剩余的56bit(7字节)用于存储字符串的值和‘\0’结尾。其中,字符串长度存储为7-string_length。当字符串长度为7时,该值恰好为0;另外,短字符串即ShortString的标识flag也被设置为0,从而使整个JSON数值的最后一个字节为‘\0’,满足了字符串必须以‘\0’结尾的要求。
指针优化
在示例实施例中,使用60bit存储长字符串即长度大于等于8字节的字符串、数组Array和对象Object的指针。在当前的x64架构实现下,64位地址空间仅使用低48bit,剩余的高16bit没有使用。因此,在该示例实施例中,在64位操作系统下使用60bit存储指针是安全的。
有损数字优化
在示例实施例中,使用60位存储原本64位的长整数或双精度浮点数。这会带来一些损失,但通常情况下可以忽略。例如,64bit整数的值域范围是:[-9223372036854775808,9223372036854775807]。60bit整数的值域范围是:[-576460752303423488,576460752303423487]。虽然值域缩小了,但仍然达到10的17次方量级,对于一般整数使用足够大了。
对于双精度浮点数,根据IEEE 754标准,使用1bit表示符号,11bit表示指数,52bit表示小数部分。在示例实施例中,把52bit中的最低4bit截断了,只保留48bit。因此,在该示例实施例中,浮点数相比正常双精度浮点数,在值域范围上没有变化,但精度上损失:1/2^48=3.5^-15。这对于一般的浮点数计算来说可以忽略。
字符串长度压缩
在示例实施例中,对于大于等于8字节的字符串,需要存储在JSON数值的存储结构的外部。但通常使用int或long记录字符串长度,需要4-8个字节,非常浪费空间。因此,该示例实施例中,使用变长整数方式进行压缩,具体而言,(1)每个字节只使用7bit存储整数;(2)最高位用于表示当前字节是否是最后一个字节。这样,对于小于128字节的字符串,只需要1个字节存储长度;对于小于16384字节的字符串,只需要2字节存储长度。另外,字符串的长度和字符串本身连续存储,避免了额外的指针空间占用。
Key(关键字)缓存优化
JSON数据中的Object类型的JSON数值的Key都是字符串,关键字Key出现频率很高。如果按照普通字符串的方式来存储,必将占用非常多的存储空间。经过统计,典型的医疗JSON数据中将近一半空间用于存储Key字符串。但经过分析发现,这些字符串大量重复。去重之后仅有几十到几百个。因此,在示例实施例中,可以建立Object类型的JSON数值的全局关键字Key缓存,在记录Key时,仅记录该Key在缓存中的编号即可。该编号可以非常小(在示例实施例中通常用2个字节表示,可支持多达65535个Unique Key)。通过这种方式可以把Key字符串的存储转换成对于16位整数的存储,大大降低存储开销。而且整数的查找、比较等方法显著快于字符串,同时也提升了访问性能。
先构造后拷贝优化
在解析JSON数据的Array和Object数据时,一种技术方案为:创建相应的Array、Object内存对象,然后解析一个值就向Array或Object添加一个值。通常解析器无法预知正在解析的Array或Object对象有多少元素。因此一般Array或Object对象内部会预先分配好一块空间用于存储插入的值,若空间不够将申请一块更大的空间(一般是原空间的2倍)。这种做法经常会导致内存空间碎片,浪费额外的空间。例如某个Array对象只有9个元素,但其底层存储可能预先分配了16个元素的空间。
进一步地,对应数组型或对象型的数据对象,容量(Capacity)表示存储数组型或对象型的数据对象的内存缓冲区的大小(最多可以存放多少个数据元素);大小(Size)表示存储数组型或对象型的数据对象的内存缓冲区中实际存放了多少个数据元素。一般大小(Size)<=容量(Capacity);值指针或成员指针(MembersPointer)是指向该Array或Object真实数据内存缓冲区的指针。例如,图5中数组型JSON数值的值指针指向该内存缓冲区实际存放了4个数据元素,每个数据元素用64为存储单元存储;对象型JSON数值的成员指针指向的该内存缓冲区实际存放了4个数据元素,其中,每个数据元素用16位存储单元存储关键字key,64未存储对应的值。
在示例实施例中,在从JSON数据中解析的数据对象的数据类型为数组型或对象型时,在内存栈上构造所述数据对象;将在内存栈上构造的数据对象存储在对应的内存存储地址中,也就是说,采用先构造数据对象后拷贝数据对象的方式进行优化。
具体而言,在该示例实施例中,首先在栈上对Array或Object对象进行构造,栈空间不够时会自动申请扩容。由于栈空间是所有数据共享的,全局只有一份,因此栈空间的自动扩容不会造成显著的内存浪费。当Array或Object在栈上完成构造后,再创建真正的Array或Object对象,并把数据从栈上拷贝过去。由于此时已经确切知道该对象有多少元素,内存分配不会有一点浪费。
内存池优化
操作系统的内存分配器通常需要针对每块动态分配的内存做记录,有一定额外开销,当该内存块较小时,额外的开销尤其明显。因此,在示例实施例中,使用内存池分配所有JSON加载后的数据结构,并且不释放,仅在所有该内存池中的对象都不再使用时,再一次性释放所有内存池的内存。通过这种方式,内存池的设计可以非常简单,不需要额外的空间做内存记录,进一步节省内存占用。这种内存池的使用方式,非常适合在线服务(数据在一次请求/响应中有效)或大数据(数据在一次load(加载)+modify(修改)+write(写入)中有效)场景。在这两种场景下,内存数据的生命周期一般都很短,不需要长期有效。
根据本发明的示例实施例中的技术方案,能够显著优化JSON数据加载后的内存占用大小。例如,对于50MB原始JSON数据,使用Python原生库加载后内存占用为500MB,使用rapidjson加载后内存占用约100MB,使用本发明的示例实施例中技术方案加载后内存仅占用40MB。
此外,在本发明的实施例中,还提供了一种数据存储装置。参照图6所示,该数据存储装置可以包括:数据对象获取单元610以及数据存储单元620。其中,数据对象获取单元610用于获取JSON数据,解析所述JSON数据并确定所述JSON数据中的数据对象的数据类型;数据存储单元620用于基于所述数据对象的数据类型通过预定内存单元存储所述数据对象,所述预定内存单元包括数据类型存储部分以及数据存储部分。
在本发明的一些实施例中,基于前述方案,数据存储单元620被配置为:在所述数据对象的数据类型为短字符串型、空值型、布尔型、整数型、浮点型中的一种数据类型时,通过所述数据类型存储部分存储所述数据对象的数据类型;通过所述数据存储部分存储所述数据对象的值,所述短字符串型的字符串的长度小于8个字节。
在本发明的一些实施例中,基于前述方案,数据存储单元620被配置为:在所述数据对象的数据类型为长字符串型、数组型、对象型中的一种数据类型时,通过所述数据类型存储部分存储所述数据对象的数据类型;通过所述数据存储部分存储所述数据对象的元信息的指针,所述指针指向所述数据对象的元信息的内存存储地址,所述长字符串型的字符串的长度大于等于8个字节。
在本发明的一些实施例中,基于前述方案,所述数据存储装置还包括:构造单元,用于在所述数据对象的数据类型为所述数组型或所述对象型时,在内存栈上构造所述数据对象;存储单元,用于将在所述内存栈上构造的所述数据对象存储在所述内存存储地址中。
在本发明的一些实施例中,基于前述方案,所述数据存储装置还包括:去重单元,用于对所述对象型数据的关键字进行去重,通过全局关键字缓存存储去重后的所述对象型数据的关键字。
在本发明的一些实施例中,基于前述方案,所述数据存储装置还包括:分配单元,用于通过内存池分配所述数据对象的存储单元;释放单元,用于在所述内存池中的所有数据对象都不再使用时,一次性释放所述内存池中的所有数据对象占用的内存。
在本发明的一些实施例中,基于前述方案,所述数据类型存储部分为4位存储单元以及所述数据存储部分为60位存储单元。
在本发明的一些实施例中,基于前述方案,数据存储单元620被配置为:在所述数据对象的数据类型为双精度浮点型时,通过所述数据类型存储部分存储所述数据对象的数据类型;通过所述数据存储部分的第1位存储所述数据对象的符号,第2位至第12位存储所述数据对象的指数部分,第12位至第60位存储所述数据对象的小数部分。
在本发明的一些实施例中,基于前述方案,所述数据存储装置还包括:字符串长度存储单元,用于通过第1位至第7位存储所述长字符串型的字符串的长度,通过第8位表示当前字节是否是最后一个字节。由于本发明的示例实施例的数据存储装置600的各个功能模块与上述数据存储方法的示例实施例的步骤对应,因此在此不再赘述。
在本发明的示例性实施例中,还提供了一种能够实现上述方法的电子设备。
下面参考图7,其示出了适于用来实现本发明实施例的电子设备的计算机系统700的结构示意图。图7示出的电子设备的计算机系统700仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图7所示,计算机系统700包括中央处理单元(CPU)701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。在RAM 703中,还存储有系统操作所需的各种程序和数据。CPU701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
以下部件连接至I/O接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
特别地,根据本发明的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被中央处理单元(CPU)701执行时,执行本申请的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该电子设备执行时,使得该电子设备实现如上述实施例中所述的数据存储方法。
例如,所述电子设备可以实现如图4中所示的:步骤S410,获取JSON数据,解析所述JSON数据并确定所述JSON数据中的数据对象的数据类型;
步骤S420,基于所述数据对象的类型通过预定内存单元存储所述数据对象,所述预定内存单元包括数据类型存储部分以及数据存储部分。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备或装置的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本发明实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本发明实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

Claims (12)

1.一种数据存储方法,用于医疗数据处理,其特征在于,包括:
获取JSON数据,解析所述JSON数据并确定所述JSON数据中的数据对象的数据类型;
基于所述数据对象的数据类型通过预定内存单元存储所述数据对象,所述预定内存单元包括数据类型存储部分以及数据存储部分;
其中,基于所述数据对象的数据类型通过预定内存单元存储所述数据对象,包括:在所述数据对象的数据类型为短字符串型、空值型、布尔型、整数型、浮点型中的一种数据类型时,通过所述数据类型存储部分存储所述数据对象的数据类型;通过所述数据存储部分存储所述数据对象的值;或者,
在所述数据对象的数据类型为长字符串型、数组型、对象型中的一种数据类型时,通过所述数据类型存储部分存储所述数据对象的数据类型;通过所述数据存储部分存储所述数据对象的元信息的指针,所述指针指向所述数据对象的元信息的内存存储地址。
2.根据权利要求1所述的数据存储方法,其特征在于,所述短字符串型的字符串的长度小于8个字节。
3.根据权利要求1所述的数据存储方法,其特征在于,所述长字符串型的字符串的长度大于等于8个字节。
4.根据权利要求3所述的数据存储方法,其特征在于,所述数据存储方法还包括:
在所述数据对象的数据类型为所述数组型或所述对象型时,在内存栈上构造所述数据对象;
将在所述内存栈上构造的所述数据对象存储在所述内存存储地址中。
5.根据权利要求3所述的数据存储方法,其特征在于,所述数据存储方法还包括:
对所述对象型数据的关键字进行去重,通过全局关键字缓存存储去重后的所述对象型数据的关键字。
6.根据权利要求1所述的数据存储方法,其特征在于,所述数据存储方法还包括:
通过内存池分配所述数据对象的存储单元;
在所述内存池中的所有数据对象都不再使用时,一次性释放所述内存池中的所有数据对象占用的内存。
7.根据权利要求1至6中任一项所述的数据存储方法,其特征在于,所述数据类型存储部分为4位存储单元以及所述数据存储部分为60位存储单元。
8.根据权利要求1所述的数据存储方法,其特征在于,基于所述数据对象的数据类型通过预定内存单元存储所述数据对象,包括:
在所述数据对象的数据类型为双精度浮点型时,通过所述数据类型存储部分存储所述数据对象的数据类型;
通过所述数据存储部分的第1位存储所述数据对象的符号,第2位至第12位存储所述数据对象的指数部分,第12位至第60位存储所述数据对象的小数部分。
9.根据权利要求3所述的数据存储方法,其特征在于,所述数据存储方法还包括:
通过第1位至第7位存储所述长字符串型的字符串的长度,通过第8位表示当前字节是否是最后一个字节。
10.一种数据存储装置,用于医疗数据处理,其特征在于,包括:
数据对象获取单元,用于获取JSON数据,解析所述JSON数据并确定所述JSON数据中的数据对象的数据类型;
数据存储单元,用于基于所述数据对象的数据类型通过预定内存单元存储所述数据对象,所述预定内存单元包括数据类型存储部分以及数据存储部分;其中,基于所述数据对象的数据类型通过预定内存单元存储所述数据对象,包括:在所述数据对象的数据类型为短字符串型、空值型、布尔型、整数型、浮点型中的一种数据类型时,通过所述数据类型存储部分存储所述数据对象的数据类型;通过所述数据存储部分存储所述数据对象的值;或者,
在所述数据对象的数据类型为长字符串型、数组型、对象型中的一种数据类型时,通过所述数据类型存储部分存储所述数据对象的数据类型;通过所述数据存储部分存储所述数据对象的元信息的指针,所述指针指向所述数据对象的元信息的内存存储地址。
11.一种电子设备,其特征在于,包括:
处理器;以及
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时实现如权利要求1至9中任一项所述的数据存储方法。
12.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至9中任一项所述的数据存储方法。
CN201811387710.9A 2018-11-21 2018-11-21 数据存储方法、装置、电子设备及存储介质 Active CN109582231B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811387710.9A CN109582231B (zh) 2018-11-21 2018-11-21 数据存储方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811387710.9A CN109582231B (zh) 2018-11-21 2018-11-21 数据存储方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN109582231A CN109582231A (zh) 2019-04-05
CN109582231B true CN109582231B (zh) 2022-03-15

Family

ID=65923520

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811387710.9A Active CN109582231B (zh) 2018-11-21 2018-11-21 数据存储方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN109582231B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110545107B (zh) * 2019-09-09 2022-12-20 飞天诚信科技股份有限公司 数据处理方法、装置、电子设备及计算机可读存储介质
CN110764777B (zh) * 2019-10-17 2020-12-08 北京东土科技股份有限公司 一种elf文件生成方法、elf文件、设备及存储介质
CN110737409B (zh) * 2019-10-21 2023-09-26 网易(杭州)网络有限公司 数据加载方法、装置和终端设备
CN113064841B (zh) * 2021-01-04 2023-06-06 统信软件技术有限公司 一种数据存储方法、处理方法、计算设备及可读存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107341262A (zh) * 2017-07-14 2017-11-10 上海达梦数据库有限公司 数据库中对象类型列的序列化、反序列化方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7409693B2 (en) * 2003-10-30 2008-08-05 International Business Machines Corporation Method and system for providing version control of parameters in a command-based API using Java serialization

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107341262A (zh) * 2017-07-14 2017-11-10 上海达梦数据库有限公司 数据库中对象类型列的序列化、反序列化方法及装置

Also Published As

Publication number Publication date
CN109582231A (zh) 2019-04-05

Similar Documents

Publication Publication Date Title
CN109582231B (zh) 数据存储方法、装置、电子设备及存储介质
Lemire et al. Consistently faster and smaller compressed bitmaps with roaring
CN111090628B (zh) 一种数据处理方法、装置、存储介质及电子设备
US11755565B2 (en) Hybrid column store providing both paged and memory-resident configurations
EP3120266B1 (en) Ozip compression and decompression
US20160147778A1 (en) Applying a database transaction log record directly to a database table container
CN111258966A (zh) 一种数据去重方法、装置、设备及存储介质
CN106648569B (zh) 目标序列化实现方法和装置
CN113760839A (zh) 日志数据压缩处理方法、装置、电子设备和存储介质
CN110888603A (zh) 高并发数据写入方法、装置、计算机设备及存储介质
CN109697019B (zh) 基于fat文件系统的数据写入的方法和系统
US9213759B2 (en) System, apparatus, and method for executing a query including boolean and conditional expressions
US11074260B2 (en) Space-efficient methodology for representing label information in large graph data for fast distributed graph query
CN113760894A (zh) 数据调取方法、装置、电子设备及存储介质
US11429317B2 (en) Method, apparatus and computer program product for storing data
CN110069452B (zh) 数据存储方法、装置和计算机可读存储介质
CN113742332A (zh) 数据存储方法、装置、设备及存储介质
US9201937B2 (en) Rapid provisioning of information for business analytics
CN116244387A (zh) 实体关系构建方法、装置、电子设备及存储介质
CN115495212A (zh) 任务队列处理方法、装置、设备、存储介质及程序产品
CN109033271B (zh) 基于列存储的数据插入方法、装置、服务器及存储介质
CN113094415B (zh) 数据抽取方法、装置、计算机可读介质及电子设备
CN107169098B (zh) 数据搬运方法、数据搬运装置及电子设备
CN110134691B (zh) 数据校验方法、装置、设备和介质
CN108984719B (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