CN103678160A - 一种存储数据的方法和装置 - Google Patents
一种存储数据的方法和装置 Download PDFInfo
- Publication number
- CN103678160A CN103678160A CN201210315038.9A CN201210315038A CN103678160A CN 103678160 A CN103678160 A CN 103678160A CN 201210315038 A CN201210315038 A CN 201210315038A CN 103678160 A CN103678160 A CN 103678160A
- Authority
- CN
- China
- Prior art keywords
- data
- storage mode
- storage
- memory headroom
- described default
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种存储数据的方法和装置,属于计算机技术领域。所述方法包括:接收待存储于内存的数据,并获取数据的数据结构类型;当数据的数据结构类型为数组时,为数据确定在***管理的直接内存中为数组型数据结构分配的内存空间的存储位置;当数据的数据结构类型为链表或哈希表时,为数据确定在预设的定长存储方式和/或预设的变长存储方式预先在***管理的直接内存中分配的内存空间的存储位置;根据数据的存储位置,将数据存储于***管理的直接内存中。本发明根据数据的数据结构类型将数据按照预设的存储方式存储于***管理的直接内存中,既避免了堆内存于垃圾回收机制造成的应用程序吞吐量下降的问题。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种存储数据的方法和装置。
背景技术
随着Java语言编程的发展,使用Java应用程序时对于内存的存储过程出现了一些问题。传统上使用Java语言开发的应用程序在使用时对内存进行的存储操作是由JVM(Java VirtualMachine,Java虚拟机)分配并靠GC(Garbage Collection,垃圾回收)机制管理的堆内存上进行的,由于GC机制会造成的应用程序不可控且不可预知的运行暂停,进而会降低应用程序运行时的吞吐量,随着应用程序内存使用规模的扩大,堆内存与GC所造成的吞吐量下降程度会呈线性级甚至指数级增长,因此会导致应用程序的单机和集群两个维度的内存规模受到很大程度的制约。
现有技术中通过***层的解决思路,对Linux***的内核和JVM内核进行修改,使得应用程序的在进行内存的存储过程中消除GC所带来的负面影响。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
修改后的Linux***的内核和JVM内核,无法兼容标准的Linux***和JVM,进而造成修改后的Linux***的内核和JVM内核的升级和维护的困难,无法更新的升级的Linux***以及JVM会降低用户使用应用程序的效率。
发明内容
为了解决现有技术中对***内核以及虚拟机内核修改后,无法对***以及虚拟机进行升级导致降低使用应用程序的效率的问题,本发明实施例提供了一种存储数据的方法和装置。所述技术方案如下:
一方面,提供了一种存储数据的方法,所述方法包括:
接收待存储于内存的数据,并获取所述数据的数据结构类型;
当所述数据的数据结构类型为数组时,为所述数据确定在***管理的直接内存中为数组型数据结构分配的内存空间的存储位置;
当所述数据的数据结构类型为链表或哈希表时,为所述数据确定在预设的定长存储方式和/或预设的变长存储方式预先在***管理的直接内存中分配的内存空间的存储位置;
根据所述数据的存储位置,将所述数据存储于***管理的直接内存中。
其中,所述当所述数据的数据结构类型为链表时,为所述数据确定在预设的定长存储方式和/或预设的变长存储方式预先在***管理的直接内存中分配的内存空间的存储位置,包括:
当所述数据的数据结构类型为链表且所述数据的数据部分为固定长度时,根据预设的定长存储方式分配的内存空间中的第一级位图中的空闲位置,确定所述数据的指针部分以及数据部分存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号;
根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分存储于所述预设的定长存储方式的第一级存储结构中的第二级存储结构中的索引序号;
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的。
其中,所述根据所述数据的存储位置,将所述数据存储于***管理的直接内存中,包括:
根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及数据部分存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
其中,所述当所述数据的数据结构类型为链表时,为所述数据确定在预设的定长存储方式和/或预设的变长存储方式预先在***管理的直接内存中分配的内存空间的存储位置,包括:
当所述数据的数据结构类型为链表且所述数据的数据部分为非固定长度时,根据预设的定长存储方式分配的内存空间中的第一级位图,确定所述数据的指针部分以及数据部分的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号;
根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
在所述预设的变长存储方式分配的内存空间中,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中各级存储结构中对应的各级索引序号;
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的;所述预设的变长存储方式分配的内存空间中包含多个所述预设的变长存储方式对应的第一级存储结构,按从小到大的顺序排列,所有所述预设的变长存储方式对应的第一级别存储结构的存储空间的容量之间的关系是一个等比数列。
其中,所述在所述预设的变长存储方式分配的内存空间中,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中各级存储结构中对应的各级索引序号,包括:
在预设的变长存储方式分配的内存空间中,根据所述数据的数据部分占用存储空间的大小以及所述预设的变长存储方式第一级存储结构中每一个存储空间的大小,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号;
根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构的中的第三级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号。
其中,所述根据所述数据的存储位置,将所述数据存储于***管理的直接内存中,包括:
根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号,将所述数据的数据部分存储于***管理的根据所述预设的变长存储方式分配的直接内存中,并将所述数据的数据部分通过所述预设的变长存储方式存储的各级索引序号作为所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息,使得所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中;
根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
其中,所述当所述数据的数据结构类型为哈希表时,为所述数据确定在预设的定长存储方式和/或预设的变长存储方式预先在***管理的直接内存中分配的内存空间的存储位置,包括:
当所述数据的数据结构类型为哈希表时,根据哈希函数计算出所述数据对应的哈希桶的存储位置信息;
根据所述哈希桶的存储位置信息,查找到所述哈希桶中保存的哈希链的存储位置信息;
在所述哈希桶中保存的哈希链的存储位置信息对应的哈希链中,根据预设的定长存储方式分配的内存空间中的第一级位图,确定所述数据的指针部分以及数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号;
根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
在所述预设的变长存储方式分配的内存空间中,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中各级存储结构中对应的各级索引序号;
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的;所述预设的变长存储方式分配的内存空间中包含多个所述预设的变长存储方式对应的第一级存储结构,按从小到大的顺序排列,所有所述预设的变长存储方式对应的第一级别存储结构的存储空间的容量之间的关系是一个等比数列。
其中,所述在所述预设的变长存储方式分配的内存空间中,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中各级存储结构中对应的各级索引序号,包括:
在预设的变长存储方式分配的内存空间中,根据所述数据的数据部分占用空间的大小以及所述预设的变长存储方式第一级存储结构中每一个存储空间的大小,确定所述数据的数据部分存储于预设的变长存储方式中的第一级存储结构中的索引序号;
根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构的中的第三级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号。
其中,所述根据所述数据的存储位置,将所述数据存储于***管理的直接内存中,包括:
根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号,将所述数据的数据部分存储于***管理的根据所述预设的变长存储方式分配的直接内存中,并将所述数据的数据部分通过所述预设的变长存储方式存储的各级索引序号作为所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息,使得所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中;
根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
另一方面,提供了一种存储数据的装置,所述装置包括:
接收模块,用于接收待存储于内存的数据,并获取所述数据的数据结构类型;
第一确定存储位置模块,用于当所述数据的数据结构类型为数组时,为所述数据确定在***管理的直接内存中为数组型数据结构分配的内存空间的存储位置;
第二确定存储位置模块,用于当所述数据的数据结构类型为链表或哈希表时,为所述数据确定在预设的定长存储方式和/或预设的变长存储方式预先在***管理的直接内存中分配的内存空间的存储位置;
存储模块,用于根据所述数据的存储位置,将所述数据存储于***管理的直接内存中。
其中,所述第二确定存储位置模块,包括:
第一索引序号确定单元,用于当所述数据的数据结构类型为链表且所述数据的数据部分为固定长度时,根据预设的定长存储方式分配的内存空间中的第一级位图中的空闲位置,确定所述数据的指针部分以及数据部分存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号;
第二索引序号确定单元,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分存储于所述预设的定长存储方式的第一级存储结构中的第二级存储结构中的索引序号;
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的。
其中,所述存储模块,包括:
第一链表类型存储单元,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及数据部分存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
其中,所述第二确定存储位置模块,包括:
第三索引序号确定单元,用于当所述数据的数据结构类型为链表且所述数据的数据部分为非固定长度时,根据预设的定长存储方式分配的内存空间中的第一级位图,确定所述数据的指针部分以及数据部分的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号;
第四索引序号确定单元,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
第五索引序号确定单元,用于在所述预设的变长存储方式分配的内存空间中,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中各级存储结构中对应的各级索引序号。
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的;所述预设的变长存储方式分配的内存空间中包含多个所述预设的变长存储方式对应的第一级存储结构,按从小到大的顺序排列,所有所述预设的变长存储方式对应的第一级别存储结构的存储空间的容量之间的关系是一个等比数列。
其中,所述第五索引序号确定单元,包括:
第一索引序号确定子单元,用于在预设的变长存储方式分配的内存空间中,根据所述数据的数据部分占用存储空间的大小以及所述预设的变长存储方式第一级存储结构中每一个存储空间的大小,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号;
第二索引序号确定子单元,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
第三索引序号确定子单元,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构的中的第三级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号。
其中,所述存储模块,包括:
第二链表类型存储单元,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号,将所述数据的数据部分存储于***管理的根据所述预设的变长存储方式分配的直接内存中,并将所述数据的数据部分通过所述预设的变长存储方式存储的各级索引序号作为所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息,使得所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中;
第三链表类型存储单元,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
其中,所述第二确定存储位置模块,包括:
计算单元,用于当所述数据的数据结构类型为哈希表时,根据哈希函数计算出所述数据对应的哈希桶的存储位置信息;
查找单元,用于根据所述哈希桶的存储位置信息,查找到所述哈希桶中保存的哈希链的存储位置信息;
第六索引序号确定单元,用于在所述哈希桶中保存的哈希链的存储位置信息对应的哈希链中,根据预设的定长存储方式分配的内存空间中的第一级位图,确定所述数据的指针部分以及数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号;
第七索引序号确定单元,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
第八索引序号确定单元,用于在所述预设的变长存储方式分配的内存空间中,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中各级存储结构中对应的各级索引序号;
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的;所述预设的变长存储方式分配的内存空间中包含多个所述预设的变长存储方式对应的第一级存储结构,按从小到大的顺序排列,所有所述预设的变长存储方式对应的第一级别存储结构的存储空间的容量之间的关系是一个等比数列。
其中,所述第八索引序号确定单元,包括:
第四索引序号确定子单元,用于在预设的变长存储方式分配的内存空间中,根据所述数据的数据部分占用空间的大小以及所述预设的变长存储方式第一级存储结构中每一个存储空间的大小,确定所述数据的数据部分存储于预设的变长存储方式中的第一级存储结构中的索引序号;
第五索引序号确定子单元,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
第六索引序号确定子单元,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构的中的第三级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号。
其中,所述存储模块,包括:
第一哈希表类型存储单元,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号,将所述数据的数据部分存储于***管理的根据所述预设的变长存储方式分配的直接内存中,并将所述数据的数据部分通过所述预设的变长存储方式存储的各级索引序号作为所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息,使得所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中;
第二哈希表类型存储单元,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
本发明实施例提供的技术方案带来的有益效果是:
通过将待存储于内存的数据,根据数据结构类型按照预设的存储方式存储于***管理的直接内存中,既避免了堆内存于垃圾回收机制造成的应用程序吞吐量下降的问题,又避免了修改***以及虚拟机内核造成的无法升级导致用户使用应用程序效率下降的问题。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例一提供的存储数据的方法流程图;
图2是本发明实施例一提供的存储数据的方法中变长存储方式的结构示意图;
图3是本发明实施例一提供的存储数据的方法中定长存储方式的结构示意图;
图4是本发明实施例二提供的存储数据的方法流程图;
图5是本发明实施例三提供的存储数据的方法流程图;
图6是本发明实施例四提供的存储数据的方法流程图;
图7是本发明实施例五提供的存储数据的装置结构示意图;
图8是本发明实施例六提供的存储数据的装置结构示意图;
图9是本发明实施例七提供的存储数据的装置结构示意图;
图10是本发明实施例八提供的存储数据的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例一
本发明实施例提供了一种存储数据的方法,参见图1。
需要说明的是,在实现本发明的存储数据的方法之前,构建了一种JAVA编程库,它自下而上分为两个层次,分别是:存储引擎层和数据结构层。其中,存储引擎层包括变长存储引擎和定长存储引擎两个部分,数据结构层包括数组、链表和哈希表等常用的数据结构。存储引擎层整体上基于直接内存进行构建,从而避免了堆内存的使用和GC的影响,其中直接内存即为Linux***直接进行管理的内存。数据结构层整体上基于存储引擎层进行构建,提供了常用的数据结构,从而让应用的开发可以使用这些数据结构来方便地实现高效率超大内存的应用程序。
变长存储引擎是一种SlabFamily/Slab/Chunk的三级存储结构,其结构参见如图2。该结构将要管理的全部内存空间划分为多个SlabFamily(0,1,…,M),每个SlabFamily划分为多个Slab(0,1,…,N),每个Slab又划分为多个Chunk(0,1,…,P)。
变长存储引擎包含三个预先指定的参数,分别是MinSize(最小数据块大小)、MaxSize(最大数据块大小)和Factor(比例因子)。从MinSize到MaxSize按照Factor计算出一个等比数列Size0,Size1,…,SizeM,其中Size0即MinSize,SizeM是不小于MaxSize的第一个整数。这个等比数列Size0,Size1,…,SizeM与SlabFamily0,SlabFamily1,…,SlabFamilyM一一对应,即全部的SlabFamily是依据这个等比数列创建出来的,将某个SlabFamily在这个等比数列中的对应值叫做这个SlabFamily的“数据块值”。
对于某个SlabFamilyA(0≤A≤M),它的数据块值是SizeA,因此该SlabFamilyA就用来存储不大于SizeA的实际数据块。即假如有一个大小为X的实际数据块,通过对等比数列Size0,Size1,…,SizeM进行二分查找确定这个实际数据块在其中的***位置为A(0≤A≤M,Size(A-1)<X≤SizeA),那么这个实际数据块就会存放在SlabFamilyA中。
SlabFamily内部包含两个部分:Slab链表和Slab位图。Slab链表用链表结构串联起来全部Slab(0,1,…,N),实际数据块存放在某个具体的Slab中。Slab位图是用二进制位集合指示各个Slab是否已存满,用1表示已存满,用0表示未存满。在存放数据时,对Slab位图进行二分查找,若找到一个未存满的Slab,则可把实际数据块放入其中;若找不到,则说明空间不足,需要新创建一个Slab再放置数据。此外,SlabFamily也会用单独的线程来定期检查是否全部Slab都已存满,如果存满则SlabFamily将新创建一个Slab并把它挂到Slab链表的末尾,以保证有足够的空间用于存储。同时,SlabFamily还会定期检查完全空闲的Slab的数量,当这个数量较多时,SlabFamily将删除其中一部分Slab以释放相应的空闲空间。
Slab由SlabFamily负责创建和管理,Slab内部包含两部分:直接内存区和Chunk位图。直接内存区藉由ByteBuffer.allocateDirect()调用创建出来,可以让应用程序高效方便地对进行数据读写。Slab的直接内存区是实际数据块的存放地,它是一个长度固定的内存区块(通常是1M字节大小),并且在逻辑上被划分为若干个大小相同的Chunk(0,1,...,P)。Chunk的大小等同于这个Slab所在的SlabFamily的数据块值,Chunk是实际数据块的最终存储地。Chunk位图用二进制位集合指示各个Chunk是否已被占用,用1表示已占用,用0表示未占用。在存放数据时对Chunk位图进行二分查找:若找到一个未占用的Chunk,则可让实际数据块占据之;若找不到,则说明空间不足,需要换一个Slab再做尝试。
对于变长存储引擎SlabFamily/Slab/Chunk三级存储结构的原理,应用程序存放一个实际数据块到变长存储引擎中的流程是:(1)根据实际数据块的大小找到应该存放到的SlabFamilyA;(2)根据SlabFamilyA的Slab位图找到可供存放的SlabB;(3)根据SlabB的Chunk位图找到可供存放的ChunkC;(4)在ChunkC的直接内存区上写入实际数据块以最终完成存放,并把SlabFamilyA/SlabB/ChunkC的索引序号组A,B,C返回给应用程序以告知最终存放位置。反之,对于应用程序访问变长存储引擎中索引序号组为A,B,C的一个实际数据块的流程是:(1)定位到SlabFamilyA;(2)定位到SlabFamilyA中的SlabB;(3)定位到SlabB中的ChunkC;(4)在ChunkC的直接内存区上读取实际数据块以最终完成访问。删除一个实际数据块时,将它对应的Chunk位图中的二进制位标记为0即可从逻辑意义上删除它。
定长存储引擎可以看作是变长存储引擎在存储固定长度数据块时的一个特例,因此其结构与变长存储引擎类似。定长存储引擎是一种Slab/Chunk的两级存储结构,其结构参见图3,它把要管理的内存空间划分为多个Slab(0,1,…,M),每个Slab又划分为多个Chunk(0,1,…,N)。与变长存储引擎相比,定长存储引擎事实上就是少了SlabFamily这个层级,而Slab/Chunk这两级的原理和实现几乎是完全相同的。
定长存储引擎根据一个预先指定的参数FixSize(固定数据块大小),把创建出Slab从逻辑上划分为相应固定大小的Chunk。定长存储引擎仍然用Slab链表和Slab位图这两部分来管理Slab,同样也用单独的线程来检查全部Slab的存满或空闲状态并相应进行创建或释放操作。Slab仍然用直接内存区和Chunk位图来管理Chunk,并最终完成实际数据块的存储。
应用程序存放一个实际数据块到定长存储引擎中的流程是:(1)根据Slab位图找到可供存放的SlabA;(2)根据SlabA的Chunk位图找到可供存放的ChunkB;(3)在ChunkB的直接内存区上写入实际数据块以最终完成存放,并把SlabA/ChunkB的索引序号组A,B返回给应用程序以告知最终存放位置。反之,应用程序访问定长存储引擎中索引序号组为A,B的一个实际数据块的流程是:(1)定位到SlabA;(2)定位到SlabA中的ChunkB;(3)在ChunkB的直接内存区上读取实际数据块以最终完成访问。删除一个实际数据块是通过修改Chunk位图的二进制位来实现逻辑意义上的删除。
存储数据的方法流程包括:
101:接收待存储于内存的数据,并获取所述数据的数据结构类型;
102:当所述数据的数据结构类型为数组时,为所述数据确定在***管理的直接内存中为数组型数据结构分配的内存空间的存储位置;
103:当所述数据的数据结构类型为链表或哈希表时,为所述数据确定在预设的定长存储方式和/或预设的变长存储方式预先在***管理的直接内存中分配的内存空间的存储位置;
104:根据所述数据的存储位置,将所述数据存储于***管理的直接内存中。
本发明实施例通过将待存储于内存的数据,根据数据结构类型按照预设的存储方式存储于***管理的直接内存中,既避免了堆内存于垃圾回收机制造成的应用程序吞吐量下降的问题,又避免了修改***以及虚拟机内核造成的无法升级导致用户使用应用程序效率下降的问题。
实施例二
本发明实施例提供了一种存储数据的方法,参见图4,需要说明的是本发明实施例是以链表类型的数据结构对应的数据进行存储。
方法流程包括:
401:接收待存储于内存的数据,并获取所述数据的数据结构类型。
402:当所述数据的数据结构类型为链表时,为所述数据确定在预设的定长存储方式和/或预设的变长存储方式预先在***管理的直接内存中分配的内存空间的存储位置。
具体的,对于链表类型的数据结构的数据,可以根据该数据的数据部分的固定长度或非固定长度两种类型分别使用定长和变长存储方式进行存储。
当数据的数据部分为固定长度时:
步骤402可以具体为:
4021:当所述数据的数据结构类型为链表且所述数据的数据部分为固定长度时,根据预设的定长存储方式分配的内存空间中的第一级位图中的空闲位置,确定所述数据的指针部分以及数据部分存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号。
当数据的数据类型为固定长度时,将数据中的指针部分以及数据部分按照定长存储方式进行存储。其中,定长存储方式中的第一级位图即对应定长存储引擎中的Slab位图,查找空闲的并且可以容纳下数据的定长存储方式中的第一级存储结构SlabA。
4022:根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分存储于所述预设的定长存储方式的第一级存储结构中的第二级存储结构中的索引序号。
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的。
在定长存储方式中的第一级存储结构SlabA中,查询SlabA对应的Chunk位图,即在SlabA中查询第二级位图中空闲的位置,作为存储数据块的存储之地ChunkB。
在本发明实施例中,根据所述数据的存储位置,将所述数据存储于***管理的直接内存中,数据的存储方式为:
403:根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及数据部分存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
数据的指针部分是所指向的另一个元素存储在定长存储引擎中的索引序号组。该索引序号组即为步骤4021和步骤4022中查找到的SlabA和ChunkB中的标号A和B,该索引值为两个长整型数值,总共固定是16个字节。
当数据的数据部分为非固定长度时:
步骤402可以具体为:
4024:当所述数据的数据结构类型为链表且所述数据的数据部分为非固定长度时,根据预设的定长存储方式分配的内存空间中的第一级位图,确定所述数据的指针部分以及数据部分的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号。
当数据的数据类型为非固定长度时,将数据中的指针部分以及数据部分按照定长存储方式和变长存储方式混合进行存储。通过定长存储方式存储数据的指针部分和数据部分通过变长存储方式存储的存储位置信息。
其中,首先对通过定长存储方式查找数据存储的位置,定长存储方式中的第一级位图即对应定长存储引擎中的Slab位图,查找空闲的并且可以容纳下数据的定长存储方式中的第一级存储结构的索引序号SlabA。
4025:根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号。
在定长存储方式中的第一级存储结构SlabA中,查询SlabA对应的Chunk位图,即在SlabA中查询第二级位图中空闲的位置,作为存储数据块的存储之地ChunkB。
4026:在所述预设的变长存储方式分配的内存空间中,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中各级存储结构中对应的各级索引序号。
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的;所述预设的变长存储方式分配的内存空间中包含多个所述预设的变长存储方式对应的第一级存储结构,按从小到大的顺序排列,所有所述预设的变长存储方式对应的第一级别存储结构的存储空间的容量之间的关系是一个等比数列。
其中,步骤4026可以具体为:
40261:在预设的变长存储方式分配的内存空间中,根据所述数据的数据部分占用存储空间的大小以及所述预设的变长存储方式第一级存储结构中每一个存储空间的大小,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号。
在变长存储方式中查找存储数据的数据部分的位置。根据数据的数据部分大小来确定SlabFamilyA的容量可以满足该数据的存储。SlabFamilyA即变长存储方式中的第一级存储结构的索引序号。
40262:根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号。
在SlabFamilyA中的Slab位图中查找可以存储该数据的SlabB,其中SlabB即第一级存储结构中的第二级存储结构中的索引序号,Slab位图即第一级存储结构中的第二级位图。
40263:根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构的中的第三级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号。
在SlabFamilyA中的SlabB中根据Chunk位图查找可以存储该数据的ChunkC,其中ChunkC即第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号,Chunk位图即第三级位图。
404:根据所述数据的存储位置,将所述数据存储于***管理的直接内存中。
本步骤对于链表数据结构类型中,数据的数据部分为非固定长度时,存储数据的过程。其中步骤404可以具体为:
4041:根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号,将所述数据的数据部分存储于***管理的根据所述预设的变长存储方式分配的直接内存中,并将所述数据的数据部分通过所述预设的变长存储方式存储的各级索引序号作为所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息,使得所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
在SlabFamilyA中的SlabB中的ChunkC上存储该数据的数据部分,并将索引序号SlabFamilyA,SlabB,ChunkC返回并通过定长存储方式进行存储。
4042:根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
本发明实施例通过将待存储于内存的数据,根据数据结构类型按照预设的存储方式存储于***管理的直接内存中,既避免了堆内存于垃圾回收机制造成的应用程序吞吐量下降的问题,又避免了修改***以及虚拟机内核造成的无法升级导致用户使用应用程序效率下降的问题。
实施例三
本发明实施例提供了一种存储数据的方法,参见图5,需要说明的是本发明实施例是以哈希表类型的数据结构对应的数据进行存储。进一步的,本发明中的步骤描述与实施例二中某些的步骤描述相同,在此不再赘述。
方法流程包括:
501:接收待存储于内存的数据,并获取所述数据的数据结构类型。
502:当所述数据的数据结构类型为哈希表时,为所述数据确定在预设的定长存储方式和/或预设的变长存储方式预先在***管理的直接内存中分配的内存空间的存储位置。
具体的,对于哈希表类型的数据结构的数据,哈希表通常的实现包括两个部分:哈希桶和哈希链。哈希桶通过数组数据结构来实现,哈希链用变长存储的方式存储。哈希桶和哈希链是所有数据共享的,是一体的不可分隔的,哈希桶有多个,每个哈希桶关联着一个哈希链,每个数据在哈希桶和哈希链上都有唯一的一个位置。
因此步骤502可以具体为:
5021:当所述数据的数据结构类型为哈希表时,根据哈希函数计算出所述数据对应的哈希桶的存储位置信息。
5022:根据所述哈希桶的存储位置信息,查找到所述哈希桶中保存的哈希链的存储位置信息。
具体的,在哈希链的存储位置中对待保存的数据进行保存。哈希链上的每个元素作为一个实际数据块存储到变长存储引擎中,每个元素包括两部分:指针部分和数据部分。指针部分是所指向的另一个元素存储在变长存储引擎中的索引序号组,从前面变长存储引擎的描述中可知,这个索引序号组是一个形如A,B,C的三元组,即根据变长存储方式中得到的三级存储结构的索引序号。本质上是三个长整型数值,共计24个字节。数据部分是需要存放到哈希表中的键值对数据,是变长数据。因此数据的指针部分通过定长存储的方式进行保存,数据部分通过变长的方式进行保存,并将数据部分通过变长存储的方式保存时的索引序号通过定长存储的方式与数据的指针部分一并进行保存。具体的保存方式与实施例二中描述非固定长度的数据的数据部分保存的方式相同,因此在下述的步骤中具体的描述与实施例二中4024-40263中的描述相同,在此不再赘述。
5023:在所述哈希桶中保存的哈希链的存储位置信息对应的哈希链中,根据预设的定长存储方式分配的内存空间中的第一级位图,确定所述数据的指针部分以及数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号。
5024:根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号。
5025:在所述预设的变长存储方式分配的内存空间中,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中各级存储结构中对应的各级索引序号;
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的;所述预设的变长存储方式分配的内存空间中包含多个所述预设的变长存储方式对应的第一级存储结构,按从小到大的顺序排列,所有所述预设的变长存储方式对应的第一级别存储结构的存储空间的容量之间的关系是一个等比数列。
其中,步骤5025具体为:
50251:在预设的变长存储方式分配的内存空间中,根据所述数据的数据部分占用存储空间的大小以及所述预设的变长存储方式第一级存储结构中每一个存储空间的大小,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号。
50252:根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号。
50253:根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构的中的第三级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号。
503:根据所述数据的存储位置,将所述数据存储于***管理的直接内存中。
其中步骤503可以具体为:
5031:根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号,将所述数据的数据部分存储于***管理的根据所述预设的变长存储方式分配的直接内存中,并将所述数据的数据部分通过所述预设的变长存储方式存储的各级索引序号作为所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息,使得所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
5032:根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
本发明实施例通过将待存储于内存的数据,根据数据结构类型按照预设的存储方式存储于***管理的直接内存中,既避免了堆内存于垃圾回收机制造成的应用程序吞吐量下降的问题,又避免了修改***以及虚拟机内核造成的无法升级导致用户使用应用程序效率下降的问题。
实施例四
本发明实施例提供了一种存储数据的方法,参见图6,需要说明的是本发明实施例是以数组类型的数据结构对应的数据进行存储。
601:接收待存储于内存的数据,并获取所述数据的数据结构类型;
602:当所述数据的数据结构类型为数组时,为所述数据确定在***管理的直接内存中为数组型数据结构分配的内存空间的存储位置。
直接内存区由ByteBuffer.alocateDirect()调用创建出来,由于它本身可以通过索引值访问任意一个字节数据,这样就可把它等价视为一个字节数组。因此基于直接内存区来实现数组的数据结构的过程,例如:实现一个长整形数组,每个数组元素长度为8字节,只需要从逻辑上把直接内存区每8个字节划分为一个长整型数据,并使用putLong()和getLong()方法来进行写入和读取就可以了。
603:根据所述数据的存储位置,将所述数据存储于***管理的直接内存中。
本发明实施例通过将待存储于内存的数据,根据数据结构类型按照预设的存储方式存储于***管理的直接内存中,既避免了堆内存于垃圾回收机制造成的应用程序吞吐量下降的问题,又避免了修改***以及虚拟机内核造成的无法升级导致用户使用应用程序效率下降的问题。
实施例五
本发明实施例提供了一种存储数据的装置,参见图7,所述装置包括:
接收模块701,用于接收待存储于内存的数据,并获取所述数据的数据结构类型;
第一确定存储位置模块702,用于当所述数据的数据结构类型为数组时,为所述数据确定在***管理的直接内存中为数组型数据结构分配的内存空间的存储位置;
第二确定存储位置模块703,用于当所述数据的数据结构类型为链表或哈希表时,为所述数据确定在预设的定长存储方式和/或预设的变长存储方式预先在***管理的直接内存中分配的内存空间的存储位置;
存储模块704,用于根据所述数据的存储位置,将所述数据存储于***管理的直接内存中。
本发明实施例通过将待存储于内存的数据,根据数据结构类型按照预设的存储方式存储于***管理的直接内存中,既避免了堆内存于垃圾回收机制造成的应用程序吞吐量下降的问题,又避免了修改***以及虚拟机内核造成的无法升级导致用户使用应用程序效率下降的问题。
实施例六
本发明实施例提供了一种存储数据的装置,参见图8,所述装置包括:
接收模块801,用于接收待存储于内存的数据,并获取所述数据的数据结构类型;
第二确定存储位置模块802,用于当所述数据的数据结构类型为链表时,为所述数据确定在预设的定长存储方式和/或预设的变长存储方式预先在***管理的直接内存中分配的内存空间的存储位置;
存储模块803,用于根据所述数据的存储位置,将所述数据存储于***管理的直接内存中。
其中,在具体实施方式中第二确定存储位置模块802在存储的数据的数据部分为固定长度时,包括:
第一索引序号确定单元8021,用于当所述数据的数据结构类型为链表且所述数据的数据部分为固定长度时,根据预设的定长存储方式分配的内存空间中的第一级位图中的空闲位置,确定所述数据的指针部分以及数据部分存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号;
第二索引序号确定单元8022,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分存储于所述预设的定长存储方式的第一级存储结构中的第二级存储结构中的索引序号;
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的。
所述存储模块803,包括:
第一链表类型存储单元8031,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及数据部分存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
其中,在具体实施方式中确定存储位置模块802在存储的数据的数据部分为非固定长度时,包括:
第三索引序号确定单元8023,用于当所述数据的数据结构类型为链表且所述数据的数据部分为非固定长度时,根据预设的定长存储方式分配的内存空间中的第一级位图,确定所述数据的指针部分以及数据部分的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号;
第四索引序号确定单元8024,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
第五索引序号确定单元8025,用于在所述预设的变长存储方式分配的内存空间中,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中各级存储结构中对应的各级索引序号。
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的;所述预设的变长存储方式分配的内存空间中包含多个所述预设的变长存储方式对应的第一级存储结构,按从小到大的顺序排列,所有所述预设的变长存储方式对应的第一级别存储结构的存储空间的容量之间的关系是一个等比数列。
其中,所述第五索引序号确定单元8025,包括:
第一索引序号确定子单元80251,用于在预设的变长存储方式分配的内存空间中,根据所述数据的数据部分占用存储空间的大小以及所述预设的变长存储方式第一级存储结构中每一个存储空间的大小,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号;
第二索引序号确定子单元80252,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
第三索引序号确定子单元80253,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构的中的第三级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号。
所述存储模块803,包括:
第二链表类型存储单元8032,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号,将所述数据的数据部分存储于***管理的根据所述预设的变长存储方式分配的直接内存中,并将所述数据的数据部分通过所述预设的变长存储方式存储的各级索引序号作为所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息,使得所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中;
第三链表类型存储单元8033,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
本发明实施例通过将待存储于内存的数据,根据数据结构类型按照预设的存储方式存储于***管理的直接内存中,既避免了堆内存于垃圾回收机制造成的应用程序吞吐量下降的问题,又避免了修改***以及虚拟机内核造成的无法升级导致用户使用应用程序效率下降的问题。
实施例七
本发明实施例提供了一种存储数据的装置,参见图9,所述装置包括:
接收模块901,用于接收待存储于内存的数据,并获取所述数据的数据结构类型;
第二确定存储位置模块902,用于当所述数据的数据结构类型为哈希表时,为所述数据确定在预设的定长存储方式和/或预设的变长存储方式预先在***管理的直接内存中分配的内存空间的存储位置;
存储模块903,用于根据所述数据的存储位置,将所述数据存储于***管理的直接内存中。
其中,在具体实施方式中所述第二确定存储位置模块902,包括:
计算单元9021,用于当所述数据的数据结构类型为哈希表时,根据哈希函数计算出所述数据对应的哈希桶的存储位置信息;
查找单元9022,用于根据所述哈希桶的存储位置信息,查找到所述哈希桶中保存的哈希链的存储位置信息;
第六索引序号确定单元9023,用于在所述哈希桶中保存的哈希链的存储位置信息对应的哈希链中,根据预设的定长存储方式分配的内存空间中的第一级位图,确定所述数据的指针部分以及数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号;
第七索引序号确定单元9024,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
第八索引序号确定单元9025,用于在所述预设的变长存储方式分配的内存空间中,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中各级存储结构中对应的各级索引序号;
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的;所述预设的变长存储方式分配的内存空间中包含多个所述预设的变长存储方式对应的第一级存储结构,按从小到大的顺序排列,所有所述预设的变长存储方式对应的第一级别存储结构的存储空间的容量之间的关系是一个等比数列。
其中,所述第八索引序号确定单元9025,包括:
第四索引序号确定子单元90251,用于在预设的变长存储方式分配的内存空间中,根据所述数据的数据部分占用空间的大小以及所述预设的变长存储方式第一级存储结构中每一个存储空间的大小,确定所述数据的数据部分存储于预设的变长存储方式中的第一级存储结构中的索引序号;
第五索引序号确定子单元90252,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
第六索引序号确定子单元90253,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构的中的第三级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号。
其中,所述存储模块903,包括:
第一哈希表类型存储单元9031,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号,将所述数据的数据部分存储于***管理的根据所述预设的变长存储方式分配的直接内存中,并将所述数据的数据部分通过所述预设的变长存储方式存储的各级索引序号作为所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息,使得所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中;
第二哈希表类型存储单元9032,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
本发明实施例通过将待存储于内存的数据,根据数据结构类型按照预设的存储方式存储于***管理的直接内存中,既避免了堆内存于垃圾回收机制造成的应用程序吞吐量下降的问题,又避免了修改***以及虚拟机内核造成的无法升级导致用户使用应用程序效率下降的问题。
实施例八
本发明实施例提供了一种存储数据的装置,参见图10,所述装置包括:
接收模块1001,用于接收待存储于内存的数据;
第一确定存储位置模块1002,用于当所述数据的数据结构类型为数组时,为所述数据确定在***管理的直接内存中为数组型数据结构分配的内存空间的存储位置;
存储模块1003,用于根据所述数据的存储位置,将所述数据存储于***管理的直接内存中。
本发明实施例通过将待存储于内存的数据,根据数据结构类型按照预设的存储方式存储于***管理的直接内存中,既避免了堆内存于垃圾回收机制造成的应用程序吞吐量下降的问题,又避免了修改***以及虚拟机内核造成的无法升级导致用户使用应用程序效率下降的问题。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (18)
1.一种存储数据的方法,其特征在于,所述方法包括:
接收待存储于内存的数据,并获取所述数据的数据结构类型;
当所述数据的数据结构类型为数组时,为所述数据确定在***管理的直接内存中为数组型数据结构分配的内存空间的存储位置;
当所述数据的数据结构类型为链表或哈希表时,为所述数据确定在预设的定长存储方式和/或预设的变长存储方式预先在***管理的直接内存中分配的内存空间的存储位置;
根据所述数据的存储位置,将所述数据存储于***管理的直接内存中。
2.根据权利要求1所述的方法,其特征在于,所述当所述数据的数据结构类型为链表时,为所述数据确定在预设的定长存储方式和/或预设的变长存储方式预先在***管理的直接内存中分配的内存空间的存储位置,包括:
当所述数据的数据结构类型为链表且所述数据的数据部分为固定长度时,根据预设的定长存储方式分配的内存空间中的第一级位图中的空闲位置,确定所述数据的指针部分以及数据部分存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号;
根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分存储于所述预设的定长存储方式的第一级存储结构中的第二级存储结构中的索引序号;
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的。
3.根据权利要求2所述的方法,其特征在于,所述根据所述数据的存储位置,将所述数据存储于***管理的直接内存中,包括:
根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及数据部分存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
4.根据权利要求1所述的方法,其特征在于,所述当所述数据的数据结构类型为链表时,为所述数据确定在预设的定长存储方式和/或预设的变长存储方式预先在***管理的直接内存中分配的内存空间的存储位置,包括:
当所述数据的数据结构类型为链表且所述数据的数据部分为非固定长度时,根据预设的定长存储方式分配的内存空间中的第一级位图,确定所述数据的指针部分以及数据部分的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号;
根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
在所述预设的变长存储方式分配的内存空间中,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中各级存储结构中对应的各级索引序号;
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的;所述预设的变长存储方式分配的内存空间中包含多个所述预设的变长存储方式对应的第一级存储结构,按从小到大的顺序排列,所有所述预设的变长存储方式对应的第一级别存储结构的存储空间的容量之间的关系是一个等比数列。
5.根据权利要求4所述的方法,其特征在于,所述在所述预设的变长存储方式分配的内存空间中,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中各级存储结构中对应的各级索引序号,包括:
在预设的变长存储方式分配的内存空间中,根据所述数据的数据部分占用存储空间的大小以及所述预设的变长存储方式第一级存储结构中每一个存储空间的大小,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号;
根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构的中的第三级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号。
6.根据权利要求4所述的方法,其特征在于,所述根据所述数据的存储位置,将所述数据存储于***管理的直接内存中,包括:
根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号,将所述数据的数据部分存储于***管理的根据所述预设的变长存储方式分配的直接内存中,并将所述数据的数据部分通过所述预设的变长存储方式存储的各级索引序号作为所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息,使得所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中;
根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
7.根据权利要求1所述的方法,其特征在于,所述当所述数据的数据结构类型为哈希表时,为所述数据确定在预设的定长存储方式和/或预设的变长存储方式预先在***管理的直接内存中分配的内存空间的存储位置,包括:
当所述数据的数据结构类型为哈希表时,根据哈希函数计算出所述数据对应的哈希桶的存储位置信息;
根据所述哈希桶的存储位置信息,查找到所述哈希桶中保存的哈希链的存储位置信息;
在所述哈希桶中保存的哈希链的存储位置信息对应的哈希链中,根据预设的定长存储方式分配的内存空间中的第一级位图,确定所述数据的指针部分以及数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号;
根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
在所述预设的变长存储方式分配的内存空间中,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中各级存储结构中对应的各级索引序号;
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的;所述预设的变长存储方式分配的内存空间中包含多个所述预设的变长存储方式对应的第一级存储结构,按从小到大的顺序排列,所有所述预设的变长存储方式对应的第一级别存储结构的存储空间的容量之间的关系是一个等比数列。
8.根据权利要求7所述的方法,其特征在于,所述在所述预设的变长存储方式分配的内存空间中,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中各级存储结构中对应的各级索引序号,包括:
在预设的变长存储方式分配的内存空间中,根据所述数据的数据部分占用空间的大小以及所述预设的变长存储方式第一级存储结构中每一个存储空间的大小,确定所述数据的数据部分存储于预设的变长存储方式中的第一级存储结构中的索引序号;
根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构的中的第三级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号。
9.根据权利要求7所述的方法,其特征在于,所述根据所述数据的存储位置,将所述数据存储于***管理的直接内存中,包括:
根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号,将所述数据的数据部分存储于***管理的根据所述预设的变长存储方式分配的直接内存中,并将所述数据的数据部分通过所述预设的变长存储方式存储的各级索引序号作为所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息,使得所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中;
根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
10.一种存储数据的装置,其特征在于,所述装置包括:
接收模块,用于接收待存储于内存的数据,并获取所述数据的数据结构类型;
第一确定存储位置模块,用于当所述数据的数据结构类型为数组时,为所述数据确定在***管理的直接内存中为数组型数据结构分配的内存空间的存储位置;
第二确定存储位置模块,用于当所述数据的数据结构类型为链表或哈希表时,为所述数据确定在预设的定长存储方式和/或预设的变长存储方式预先在***管理的直接内存中分配的内存空间的存储位置;
存储模块,用于根据所述数据的存储位置,将所述数据存储于***管理的直接内存中。
11.根据权利要求10所述的装置,其特征在于,所述第二确定存储位置模块,包括:
第一索引序号确定单元,用于当所述数据的数据结构类型为链表且所述数据的数据部分为固定长度时,根据预设的定长存储方式分配的内存空间中的第一级位图中的空闲位置,确定所述数据的指针部分以及数据部分存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号;
第二索引序号确定单元,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分存储于所述预设的定长存储方式的第一级存储结构中的第二级存储结构中的索引序号;
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的。
12.根据权利要求11所述的装置,其特征在于,所述存储模块,包括:
第一链表类型存储单元,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及数据部分存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
13.根据权利要求10所述的装置,其特征在于,所述第二确定存储位置模块,包括:
第三索引序号确定单元,用于当所述数据的数据结构类型为链表且所述数据的数据部分为非固定长度时,根据预设的定长存储方式分配的内存空间中的第一级位图,确定所述数据的指针部分以及数据部分的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号;
第四索引序号确定单元,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
第五索引序号确定单元,用于在所述预设的变长存储方式分配的内存空间中,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中各级存储结构中对应的各级索引序号。
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的;所述预设的变长存储方式分配的内存空间中包含多个所述预设的变长存储方式对应的第一级存储结构,按从小到大的顺序排列,所有所述预设的变长存储方式对应的第一级别存储结构的存储空间的容量之间的关系是一个等比数列。
14.根据权利要求13所述的装置,其特征在于,所述第五索引序号确定单元,包括:
第一索引序号确定子单元,用于在预设的变长存储方式分配的内存空间中,根据所述数据的数据部分占用存储空间的大小以及所述预设的变长存储方式第一级存储结构中每一个存储空间的大小,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号;
第二索引序号确定子单元,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
第三索引序号确定子单元,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构的中的第三级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号。
15.根据权利要求13所述的装置,其特征在于,所述存储模块,包括:
第二链表类型存储单元,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号,将所述数据的数据部分存储于***管理的根据所述预设的变长存储方式分配的直接内存中,并将所述数据的数据部分通过所述预设的变长存储方式存储的各级索引序号作为所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息,使得所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中;
第三链表类型存储单元,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
16.根据权利要求10所述的装置,其特征在于,所述第二确定存储位置模块,包括:
计算单元,用于当所述数据的数据结构类型为哈希表时,根据哈希函数计算出所述数据对应的哈希桶的存储位置信息;
查找单元,用于根据所述哈希桶的存储位置信息,查找到所述哈希桶中保存的哈希链的存储位置信息;
第六索引序号确定单元,用于在所述哈希桶中保存的哈希链的存储位置信息对应的哈希链中,根据预设的定长存储方式分配的内存空间中的第一级位图,确定所述数据的指针部分以及数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号;
第七索引序号确定单元,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的指针部分以及数据部分的存储位置信息存储于所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
第八索引序号确定单元,用于在所述预设的变长存储方式分配的内存空间中,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中各级存储结构中对应的各级索引序号;
其中,所述预设的定长存储方式分配的内存空间中包含多个所述预设的定长存储方式对应的第一级存储结构,每一个所述预设的定长存储方式对应的第一级别存储结构的存储空间的容量是相同的;所述预设的变长存储方式分配的内存空间中包含多个所述预设的变长存储方式对应的第一级存储结构,按从小到大的顺序排列,所有所述预设的变长存储方式对应的第一级别存储结构的存储空间的容量之间的关系是一个等比数列。
17.根据权利要求16所述的装置,其特征在于,所述第八索引序号确定单元,包括:
第四索引序号确定子单元,用于在预设的变长存储方式分配的内存空间中,根据所述数据的数据部分占用空间的大小以及所述预设的变长存储方式第一级存储结构中每一个存储空间的大小,确定所述数据的数据部分存储于预设的变长存储方式中的第一级存储结构中的索引序号;
第五索引序号确定子单元,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号;
第六索引序号确定子单元,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构的中的第三级位图中的空闲位置,确定所述数据的数据部分存储于所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号。
18.根据权利要求16所述的装置,其特征在于,所述存储模块,包括:
第一哈希表类型存储单元,用于根据所述预设的变长存储方式分配的内存空间中的第一级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,所述预设的变长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的第三级存储结构中的索引序号,将所述数据的数据部分存储于***管理的根据所述预设的变长存储方式分配的直接内存中,并将所述数据的数据部分通过所述预设的变长存储方式存储的各级索引序号作为所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息,使得所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中;
第二哈希表类型存储单元,用于根据所述预设的定长存储方式分配的内存空间中的第一级存储结构中的索引序号以及所述预设的定长存储方式分配的内存空间中的第一级存储结构中的第二级存储结构中的索引序号,将所述数据的指针部分以及所述数据的数据部分在所述预设的变长存储方式分配的内存空间中的存储位置信息存储于***管理的根据所述预设的定长存储方式分配的直接内存中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210315038.9A CN103678160B (zh) | 2012-08-30 | 2012-08-30 | 一种存储数据的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210315038.9A CN103678160B (zh) | 2012-08-30 | 2012-08-30 | 一种存储数据的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103678160A true CN103678160A (zh) | 2014-03-26 |
CN103678160B CN103678160B (zh) | 2017-12-05 |
Family
ID=50315789
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210315038.9A Active CN103678160B (zh) | 2012-08-30 | 2012-08-30 | 一种存储数据的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103678160B (zh) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105224532A (zh) * | 2014-05-28 | 2016-01-06 | 腾讯科技(深圳)有限公司 | 数据处理方法及装置 |
CN105354297A (zh) * | 2015-11-03 | 2016-02-24 | 浪潮(北京)电子信息产业有限公司 | 一种数据库中数据存储的方法及*** |
WO2016138839A1 (zh) * | 2015-03-05 | 2016-09-09 | 长沙新弘软件有限公司 | 基于位图的存储空间管理***及其方法 |
CN106547603A (zh) * | 2015-09-23 | 2017-03-29 | 北京奇虎科技有限公司 | 减少golang语言***垃圾回收时间的方法和装置 |
CN107122170A (zh) * | 2017-03-22 | 2017-09-01 | 武汉斗鱼网络科技有限公司 | 一种数据数组的大容量存储方法及装置 |
CN107391257A (zh) * | 2017-06-30 | 2017-11-24 | 北京奇虎科技有限公司 | 业务所需内存容量的预估方法、装置及服务器 |
CN107391627A (zh) * | 2017-06-30 | 2017-11-24 | 北京奇虎科技有限公司 | 数据的内存占用分析方法、装置及服务器 |
CN107688438A (zh) * | 2017-08-03 | 2018-02-13 | 中国石油集团川庆钻探工程有限公司地球物理勘探公司 | 适用于大规模地震数据存储、快速定位的方法及装置 |
CN107818118A (zh) * | 2016-09-14 | 2018-03-20 | 北京百度网讯科技有限公司 | 数据存储方法和装置 |
WO2018064962A1 (zh) * | 2016-10-08 | 2018-04-12 | 腾讯科技(深圳)有限公司 | 数据存储方法、电子设备和计算机非易失性存储介质 |
CN108196937A (zh) * | 2017-12-26 | 2018-06-22 | 金蝶软件(中国)有限公司 | 字符串对象的处理方法、装置、计算机设备和存储介质 |
CN109324904A (zh) * | 2018-09-29 | 2019-02-12 | 智器云南京信息科技有限公司 | 动态内存管理方法及装置 |
CN110362311A (zh) * | 2019-06-18 | 2019-10-22 | 阿里巴巴集团控股有限公司 | 用于辅助位图对象内存分配的方法及装置 |
CN111596861A (zh) * | 2020-05-06 | 2020-08-28 | 清华大学 | 数据存储方法和装置,数据恢复方法和装置 |
CN112667637A (zh) * | 2020-12-31 | 2021-04-16 | 中移(杭州)信息技术有限公司 | 数据管理方法、装置及计算机可读存储介质 |
CN113626446A (zh) * | 2021-10-09 | 2021-11-09 | 阿里云计算有限公司 | 数据存储和查找方法、装置、电子设备及介质 |
CN113742056A (zh) * | 2020-11-19 | 2021-12-03 | 北京沃东天骏信息技术有限公司 | 一种数据存储方法、装置、设备及计算机可读存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020016878A1 (en) * | 2000-07-26 | 2002-02-07 | Flores Jose L. | Technique for guaranteeing the availability of per thread storage in a distributed computing environment |
CN1744725A (zh) * | 2004-08-31 | 2006-03-08 | 华为技术有限公司 | 一种在单板中存储数据流的方法 |
US20070016752A1 (en) * | 2005-07-18 | 2007-01-18 | Ponnappa Palecanda | Efficient data storage |
CN101169759A (zh) * | 2007-11-08 | 2008-04-30 | Ut斯达康通讯有限公司 | 应用程序级的内存管理方法 |
CN101673247A (zh) * | 2009-09-15 | 2010-03-17 | 威盛电子股份有限公司 | 内存管理***与方法 |
CN101950273A (zh) * | 2010-09-26 | 2011-01-19 | 中国人民解放军海军工程大学 | 一种dsp数据区动态管理方法 |
-
2012
- 2012-08-30 CN CN201210315038.9A patent/CN103678160B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020016878A1 (en) * | 2000-07-26 | 2002-02-07 | Flores Jose L. | Technique for guaranteeing the availability of per thread storage in a distributed computing environment |
CN1744725A (zh) * | 2004-08-31 | 2006-03-08 | 华为技术有限公司 | 一种在单板中存储数据流的方法 |
US20070016752A1 (en) * | 2005-07-18 | 2007-01-18 | Ponnappa Palecanda | Efficient data storage |
CN101169759A (zh) * | 2007-11-08 | 2008-04-30 | Ut斯达康通讯有限公司 | 应用程序级的内存管理方法 |
CN101673247A (zh) * | 2009-09-15 | 2010-03-17 | 威盛电子股份有限公司 | 内存管理***与方法 |
CN101950273A (zh) * | 2010-09-26 | 2011-01-19 | 中国人民解放军海军工程大学 | 一种dsp数据区动态管理方法 |
Cited By (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105224532A (zh) * | 2014-05-28 | 2016-01-06 | 腾讯科技(深圳)有限公司 | 数据处理方法及装置 |
CN105224532B (zh) * | 2014-05-28 | 2019-11-08 | 腾讯科技(深圳)有限公司 | 数据处理方法及装置 |
WO2016138839A1 (zh) * | 2015-03-05 | 2016-09-09 | 长沙新弘软件有限公司 | 基于位图的存储空间管理***及其方法 |
CN106547603A (zh) * | 2015-09-23 | 2017-03-29 | 北京奇虎科技有限公司 | 减少golang语言***垃圾回收时间的方法和装置 |
CN106547603B (zh) * | 2015-09-23 | 2021-05-18 | 北京奇虎科技有限公司 | 减少golang语言***垃圾回收时间的方法和装置 |
CN105354297A (zh) * | 2015-11-03 | 2016-02-24 | 浪潮(北京)电子信息产业有限公司 | 一种数据库中数据存储的方法及*** |
CN105354297B (zh) * | 2015-11-03 | 2019-03-26 | 浪潮(北京)电子信息产业有限公司 | 一种数据库中数据存储的方法及*** |
CN107818118A (zh) * | 2016-09-14 | 2018-03-20 | 北京百度网讯科技有限公司 | 数据存储方法和装置 |
US10969971B2 (en) | 2016-09-14 | 2021-04-06 | Beijing Baidu Netcom Science And Technology Co., Ltd. | Data storage method and apparatus |
CN107818118B (zh) * | 2016-09-14 | 2019-04-30 | 北京百度网讯科技有限公司 | 数据存储方法和装置 |
WO2018064962A1 (zh) * | 2016-10-08 | 2018-04-12 | 腾讯科技(深圳)有限公司 | 数据存储方法、电子设备和计算机非易失性存储介质 |
US10642515B2 (en) | 2016-10-08 | 2020-05-05 | Tencent Technology (Shenzhen) Company Limited | Data storage method, electronic device, and computer non-volatile storage medium |
CN107122170A (zh) * | 2017-03-22 | 2017-09-01 | 武汉斗鱼网络科技有限公司 | 一种数据数组的大容量存储方法及装置 |
CN107122170B (zh) * | 2017-03-22 | 2020-08-04 | 武汉斗鱼网络科技有限公司 | 一种数据数组的大容量存储方法及装置 |
CN107391257B (zh) * | 2017-06-30 | 2020-10-13 | 北京奇虎科技有限公司 | 业务所需内存容量的预估方法、装置及服务器 |
CN107391627A (zh) * | 2017-06-30 | 2017-11-24 | 北京奇虎科技有限公司 | 数据的内存占用分析方法、装置及服务器 |
CN107391257A (zh) * | 2017-06-30 | 2017-11-24 | 北京奇虎科技有限公司 | 业务所需内存容量的预估方法、装置及服务器 |
CN107391627B (zh) * | 2017-06-30 | 2020-11-03 | 北京奇虎科技有限公司 | 数据的内存占用分析方法、装置及服务器 |
CN107688438A (zh) * | 2017-08-03 | 2018-02-13 | 中国石油集团川庆钻探工程有限公司地球物理勘探公司 | 适用于大规模地震数据存储、快速定位的方法及装置 |
CN107688438B (zh) * | 2017-08-03 | 2021-08-27 | 中国石油集团东方地球物理勘探有限责任公司 | 适用于大规模地震数据存储、快速定位的方法及装置 |
CN108196937A (zh) * | 2017-12-26 | 2018-06-22 | 金蝶软件(中国)有限公司 | 字符串对象的处理方法、装置、计算机设备和存储介质 |
CN109324904A (zh) * | 2018-09-29 | 2019-02-12 | 智器云南京信息科技有限公司 | 动态内存管理方法及装置 |
CN110362311A (zh) * | 2019-06-18 | 2019-10-22 | 阿里巴巴集团控股有限公司 | 用于辅助位图对象内存分配的方法及装置 |
CN110362311B (zh) * | 2019-06-18 | 2023-03-14 | 创新先进技术有限公司 | 用于辅助位图对象内存分配的方法及装置 |
CN111596861A (zh) * | 2020-05-06 | 2020-08-28 | 清华大学 | 数据存储方法和装置,数据恢复方法和装置 |
CN111596861B (zh) * | 2020-05-06 | 2021-07-20 | 清华大学 | 数据存储方法和装置,数据恢复方法和装置 |
CN113742056A (zh) * | 2020-11-19 | 2021-12-03 | 北京沃东天骏信息技术有限公司 | 一种数据存储方法、装置、设备及计算机可读存储介质 |
CN112667637A (zh) * | 2020-12-31 | 2021-04-16 | 中移(杭州)信息技术有限公司 | 数据管理方法、装置及计算机可读存储介质 |
CN112667637B (zh) * | 2020-12-31 | 2023-09-19 | 中移(杭州)信息技术有限公司 | 数据管理方法、装置及计算机可读存储介质 |
CN113626446A (zh) * | 2021-10-09 | 2021-11-09 | 阿里云计算有限公司 | 数据存储和查找方法、装置、电子设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103678160B (zh) | 2017-12-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103678160A (zh) | 一种存储数据的方法和装置 | |
CN101777061B (zh) | 一种java卡对象管理方法及java卡 | |
CN105930280B (zh) | 一种面向非易失性内存的高效的页面组织和管理方法 | |
CN104317742B (zh) | 一种优化空间管理的自动精简配置方法 | |
CN101571869B (zh) | 一种智能卡的文件存储、读取方法及装置 | |
CN101241472B (zh) | 映射管理方法及*** | |
CN106681842A (zh) | 一种多进程***中共享内存的管理方法及装置 | |
US20110246742A1 (en) | Memory pooling in segmented memory architecture | |
CN108009008A (zh) | 数据处理方法和***、电子设备 | |
CN103927261A (zh) | 用于精简供应存储的高效分配和回收的方法和*** | |
CN103019962A (zh) | 数据缓存处理方法、装置以及*** | |
CN103577339A (zh) | 一种数据存储方法及*** | |
CN103593477A (zh) | 一种哈希数据库的配置方法和装置 | |
CN107256196A (zh) | 基于闪存阵列的支持零拷贝的缓存***及方法 | |
CN106383666B (zh) | 一种数据存储方法及装置 | |
CN107544756A (zh) | 基于SCM的Key‑Value日志型本地存储方法 | |
CN114546295B (zh) | 一种基于zns固态硬盘的智能写分配方法和装置 | |
CN111522507A (zh) | 一种低延迟的文件***地址空间管理方法、***及介质 | |
CN104361009B (zh) | 一种基于倒排索引的实时索引方法 | |
CN107797938A (zh) | 加快去分配命令处理的方法与存储设备 | |
CN102184140A (zh) | 一种面向实时数据库的表文件空间分配方法 | |
CN103020077A (zh) | 一种电力***实时数据库内存管理方法 | |
CA2415018C (en) | Adaptive parallel data clustering when loading a data structure containing data clustered along one or more dimensions | |
Roumelis et al. | Bulk-loading and bulk-insertion algorithms for xBR^+-trees xBR+-trees in Solid State Drives | |
CN111338569A (zh) | 一种基于直接映射的对象存储后端优化方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |