CN105138528A - 一种多值数据存储、读取的方法和装置及其存取的系统 - Google Patents
一种多值数据存储、读取的方法和装置及其存取的系统 Download PDFInfo
- Publication number
- CN105138528A CN105138528A CN201410253318.0A CN201410253318A CN105138528A CN 105138528 A CN105138528 A CN 105138528A CN 201410253318 A CN201410253318 A CN 201410253318A CN 105138528 A CN105138528 A CN 105138528A
- Authority
- CN
- China
- Prior art keywords
- index
- value
- level
- data
- data value
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Read Only Memory (AREA)
Abstract
本发明涉及计算机数据处理技术领域,公开了一种多值数据存储、读取的方法和装置及其存取的系统。在本发明的技术方案中,通过初始化两级索引及其对应关系;通过第一级索引确定键值,通过键值代表的第二级索引确定至少一个数据值,利用键对至少一个数据值进行存储、读取、删除操作。本发明的技术方案对现有技术中键值对的形式存取数据的方式进行了改进,采用的数据结构层次清晰,不必繁琐的新建对象集合,通过本发明技术方案对数据的存、取,大幅改进了多值数据的处理效率。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种多值数据存储、读取的方法和装置及其存取的系统。
背景技术
现有技术中通常是一键(key)对应一个值(value)的数据操作,比如函数方法一般仅有一个返回值,在需要返回多个值的情况下,难以实现一键对应多个值,数据处理效率低。
例如,作为跨平台的开发方法,Java技术被广泛应用于PC平台、嵌入式平台、移动终端以及互联网中。凭借其卓越的通用性、高效性、平台移植性和安全性,在全球云计算和移动互联网的产业环境下,Java技术更具备了显著优势和广阔前景。Java作为一项开放性的技术,可以兼容各种平台系统和软件应用,为了在提供良好的通用性的同时保证程序的健壮性和安全性,Java技术通过一些严格约束和限定来规范函数方法的使用。最典型地,Java中不再明确地使用指针来进行数据的存取,有效增强了内存空间的安全性。但是,这种安全限制在另一方面也导致了Java在数据存取方面的没有传统计算机软件技术自由灵活,比如在Java中就无法控制参数传递的方式,所有的参数传递都是按值传递,这使得Java中的函数方法通常只能有一个返回值,对于需要返回多个值的情况Java很难提供通用的数据处理方式。
虽然现有技术中存在借助数据集合方式实现一键(key)对应多值(value)的数据操作的解决方案,使得函数方法可以返回多个值。但是现有技术的方法只是通过现有集合类(如List、ArrayList、Map、HashMap和Hashtable等)来重新构造暂存多值数据的对象,由于基本数据类型的包装类都是只读类,这些类的对象一旦创建就不能修改,因此现有的方式在处理多值数据时(尤其是修改数据时)每次只能重新创建一个新的集合对象;加上现有方式构建的集合类还需要重新考虑泛型、安全的问题,这使得现有技术的多值数据处理方式扩展性极差、可重用性不高、使用不便且效率低下,而且安全性也并不理想。
发明内容
针对现有技术中存在的上述缺陷,本发明所要解决的技术问题是如何有效改进现有技术中的多值数据处理效率。
为解决上述技术问题,第一方面,本发明实施例提供一种多值数据存储的方法,包括步骤:
存储至少一个数据值时,确定第一级索引的各索引位置中是否存在所述至少一个数据值对应的第二级索引;
若所述第一级索引的各索引位置中存在所述至少一个数据值对应的第二级索引,则进一步获取所述第二级索引的当前计数位置,在所述第二级索引的当前计数位置后依次存入所述至少一个数据值;
若所述第一级索引的各索引位置中不存在所述至少一个数据值对应的第二级索引,则以所述第一级索引的当前计数位置作为新第二级索引,在新第二级索引的各索引位置依次存入所述至少一个数据值;
其中,所述第一级索引包括至少一个索引位置,所述第一级索引的每个索引位置对应一个所述第二级索引;所述第二级索引包括至少一个索引位置,所述第二级索引的每个索引位置对应一个数据值。
第二方面,本发明实施例还同时提供了一种多值数据读取的方法,包括步骤:
读取至少一个数据值时,从第一级索引中确定待查找的索引位置;
根据所述索引位置,查找所述至少一个数据值对应的第二级索引;
根据所述第二级索引返回所述至少一个数据值;
其中,所述第一级索引包括至少一个索引位置,所述第一级索引的每个索引位置对应一个所述第二级索引,所述第二级索引包括至少一个索引位置,所述第二级索引的每个索引位置对应一个数据值。
第三方面,本发明实施例还同时提供了一种多值数据存储的装置,包括:
确定单元,用于存储至少一个数据值时,确定第一级索引的各索引位置中是否存在所述至少一个数据值对应的第二级索引;
存储单元,用于若确定单元的确定结果为所述第一级索引的各索引位置中存在所述至少一个数据值对应的第二级索引,则进一步获取所述第二级索引的当前计数位置,在所述第二级索引的当前计数位置后依次存入所述至少一个数据值;用于若确定单元的确定结果为所述第一级索引的各索引位置中不存在所述至少一个数据值对应的第二级索引,则以所述第一级索引的当前计数位置作为新第二级索引,在新第二级索引的各索引位置依次存入所述至少一个数据值;
其中,所述第一级索引包括至少一个索引位置,所述第一级索引的每个索引位置对应一个所述第二级索引;所述第二级索引包括至少一个索引位置,所述第二级索引的每个索引位置对应一个数据值。
第四方面,本发明实施例还同时提供了一种多值数据读取的装置,包括:
第一查找单元,用于读取至少一个数据值时,从第一级索引中确定待查找的索引位置;
第二查找单元,用于根据所述索引位置,查找所述至少一个数据值对应的第二级索引;
返回单元,用于根据所述第二级索引返回所述至少一个数据值;
其中,所述第一级索引包括至少一个索引位置,所述第一级索引的每个索引位置对应一个所述第二级索引,所述第二级索引包括至少一个索引位置,所述第二级索引的每个索引位置对应一个数据值。
第五方面,本发明实施例还同时提供了一种多值数据存取的系统,包括:多值数据存储的装置和多值数据读取的装置,其中,
多值数据存储的装置,包括:
确定单元,用于存储至少一个数据值时,确定第一级索引的各索引位置中是否存在所述至少一个数据值对应的第二级索引;
存储单元,用于若确定单元的确定结果为所述第一级索引的各索引位置中存在所述至少一个数据值对应的第二级索引,则进一步获取所述第二级索引的当前计数位置,在所述第二级索引的当前计数位置后依次存入所述至少一个数据值;用于若确定单元的确定结果为所述第一级索引的各索引位置中不存在所述至少一个数据值对应的第二级索引,则以所述第一级索引的当前计数位置作为新第二级索引,在新第二级索引的各索引位置依次存入所述至少一个数据值;
多值数据读取的装置,包括:
第一查找单元,用于读取至少一个数据值时,从第一级索引中确定待查找的索引位置;
第二查找单元,用于根据所述索引位置,查找所述至少一个数据值对应的第二级索引;
返回单元,用于根据所述第二级索引返回所述至少一个数据值;
其中,所述第一级索引包括至少一个索引位置,所述第一级索引的每个索引位置对应一个所述第二级索引,所述第二级索引包括至少一个索引位置,所述第二级索引的每个索引位置对应一个数据值。
本发明实施例提供了一种多值数据存储、读取的方法和装置及其存取的系统,对现有技术中键值对的形式存取数据的方式进行了改进。本发明实施例的数据结构层次清晰,不必繁琐的新建对象集合,大幅改进了多值数据的处理效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对本发明实施例描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据本发明实施例的内容和这些附图获得其他的附图。
图1是可以实施本发明实施例的设备的示意图;
图2是本发明的第一个实施例中多值数据存储的方法的流程示意图;
图3是本发明实施例中的数据结构示意图;
图4是本发明实施例中数组大小扩充示意图;
图5是本发明的第二个实施例中多值数据读取的方法的流程示意图;
图6是本发明的第四个实施例中多值数据存储的装置的结构方框图。
图7是本发明的第五个实施例中多值数据存储的装置的结构方框图。
图8是本发明的第六个实施例中多值数据读取的装置的结构方框图。
图9是本发明的第七个实施例中多值数据存取的系统的结构方框图。
具体实施方式
为使本发明解决的技术问题、采用的技术方案和达到的技术效果更加清楚,下面将结合附图对本发明实施例的技术方案作进一步的详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在现有技术中,以Java的Map集合为例,一般通过键值对的方式实现一键对应一个值的数据处理,其中值(value)表示实际要处理的数据;键(key)表示本次要处理的值的标记。通过键值对的方式将一个值与一个键对应起来,随后通过返回键的地址来读取所述一个值的实际内容。虽然现有技术的方法能够通过现有集合类(如List、ArrayList、Map、HashMap和Hashtable等)来重新构造暂存多值数据的对象,由于基本数据类型的包装类都是只读类,这些类的对象一旦创建就不能修改,因此现有的方式在处理多值数据时(尤其是修改数据时)每次只能重新创建一个新的集合对象的方式来存取数据,扩展性差且效率低下。所以现有技术无法实现可动态扩展的一键对应多个值的技术方案。
为解决本发明的技术问题,本发明的以下实施例中提供了一种多值数据存储的方法、一种多值数据读取的方法、一种多值数据存储的装置、一种多值数据读取的装置和一种多值数据存取的系统,通过两级索引方式实现了多值数据可持续性的动态处理,大大提高了数据处理效率,对于程序开发使用非常方便。
图1是可以实施本发明实施例的设备的示意图。所述设备为数据处理系统,图1阐释了设备的多个组件,并不意味着代表组件连接的任何特定架构和方式。还应当知道具有较少组件或者可能具有较多组件其他数据处理系统也可以用于本发明。
如图1所示,设备10是数据处理系统的一种形式,其可以形成为个人计算机、笔记本计算机、平板电脑、数字媒体播放器、智能移动通信终端或专用的数据处理设备等各种设备形式。所述设备10可以包括总线11、以及与总线11连接的处理器12、易失性存储器13和非易失性存储器14,某些情况下,所述设备10还可以包括硬盘存储器15,这些部件通过总线11进行数据交换和通信。处理器12可以是独立的处理器,也可以是一个或者多个处理器集合。总线11将上述多个组件连接在一起,同时将上述组件连接到显示控制器16和I/O(输入/输出)控制器17。典型地,I/O装置18通过I/O控制器17与系统相连。I/O装置18至少包括用于获取用户操作信息的操作获取装置(例如,键盘、鼠标、触控面板等)。具体地,操作获取装置可以形成为通过有线或者无线方式(例如通过蓝牙接口)与I/O控制器17连接的装置。同时,操作获取装置也可以设置于所述设备10的本体上。
设备10中的易失性存储器13也称为内存,其具有数据读写速度快的特点,具体地,易失性存储器13可由动态随机读写存储器(DRAM)实现,动态随机读写存储器需要持续供电以更新或者维持存储器中的数据。
通常而言,非易失性存储器14是指当电流关掉后,所存储的数据不会消失的存储器,其可以包括例如只读存储器(ROM)、闪存(FlashMemory)等。
总线11可以包括通过多个本领域公知的桥连接器、控制器和/或适配器,相互连接的一条或者多条总线。
显然,本领域技术人员应该明白,后续本发明实施例中的各步骤或各模块可以通过如上所述的设备10实施。
第一个实施例
图2是本发明的第一个实施例中多值数据存储的方法的流程示意图
具体地,参见图2,多值数据存储的方法包括步骤:
S101、至少一个数据值存储时,确定第一级索引的各索引位置中是否存在至少一个数据值对应的第二级索引。
S102、若存在则进一步获取所述第二级索引的当前计数位置,在所述第二级索引的当前计数位置后依次存入所述至少一个数据值。
S103、若不存在则直接以所述第一级索引的当前计数位置作为新第二级索引,在新第二级索引的各索引位置依次存入所述至少一个数据值。
其中,所述第一级索引包括至少一个索引位置,第一级索引的每个索引位置对应一个所述第二级索引,所述第二级索引包括至少一个索引位置,第二级索引的每个索引位置对应一个数据值。
下面对上述方法做更详细的描述。首先,优选地,在首次进行至少一个数据值存储之前,还包括:创建存储数据的内存空间,初始化第一级索引和第二级索引。
图3是本发明实施例中的数据结构示意图。如图3所示,优选地,上述第一级索引为键索引(keys),第二级索引为值索引,键索引中每个索引位置为一个键(key),值索引中每个索引位置为一个值(value,即上述方法中的数据值),通过一个键与一个值索引的对应来同时处理多个值(values)。
采用该数据结构,无需频繁创建新集合对象即可快速、准确且连续性地访问和/或修改多个数据值,大大提高了数据处理效率。本领域相关技术人员应能理解,此处键或值的表述方式仅仅是为了便于理解而采用的惯用术语,实际情况中,本发明的两级索引并非仅适用于键值对的情况,在此不应理解为对本发明的两级索引方式的具体限制。
优选地,其中,第一级索引以数组形式组织,第二级索引以二维数组形式组织,所述数组和二维数组均可根据需要采用基本数组类型中的任意数组类型,如字符串型、整型、浮点型等。
图4是本发明实施例中数组大小扩充示意图。如图4所示,当第一级索引/第二级索引的数组大小超过数据默认容量时,进行容量扩充,获得扩充容量。其中,默认容量和扩充容量均通过一默认容量值defalutCapacity控制(该值优选为16,也可根据需要进行设置和调整)。
以“键”-“值”形式为例,优选地,“键”以字符串数组的形式存储,“键”是不重复的,即各“键”是唯一的;初始化一个默认容量值(默认容量值为16大小,可以动态设置值)的字符串数组,当存储“键”的字符串数组大小超过默认大小时,按照设置的默认容量值扩充当前的字符串数组,优选地,可翻倍扩充;获取“键”集合可直接访问当前的字符串数组,获取某个“键”可通过获得该“键”对应的哈希码(hashcode),通过哈希码的比对,查找出“键”是否存在(或者查找出“键”的位置信息);
“值”使用Object对象的二维数组存储,“值”是可以重复的,即可以存在相同的“值”;存储和扩充数据的方式同上述“键”的形式,扩充的时候,二维数组的行表示一个“键”对应的所有值;需要获取某个“键”对应的某个或指定某几个“值”时,可以利用“键”索引查找出对应第二级索引的指定索引位置的“值”,返回相应的“值”;整体“键”与“值”的集合为一一对应关系,需要获取某个“键”对应的“值”集合时,通过“键”在数组中位置直接对应到“值”的集合,返回对应的“值”集合。
上述多值数据存储的方法中,如需对存储的数据值进行删除时,进一步地,可通过以下方式进行操作:
数据值删除时,若删除所述第一级索引的某个索引位置对应的第二级索引中所有数据值的集合时,从所述第一级索引的各索引位置中查找所述所有数据值的集合对应的第二级索引,将第一级索引的所述某个索引位置和所述所有数据值的集合对应的第二级索引中的所有索引位置对应的内存空间置空。
数据值删除时,若删除所述第一级索引的某个索引位置对应的第二级索引中指定的至少一个数据值时,从所述第一级索引的各索引位置中查找所述指定的至少一个数据值对应的第二级索引,随后进一步查找所述指定的至少一个数据值在所述第二级索引中的索引位置,将第一级索引的所述某个索引位置和所述指定的至少一个数据值在所述第二级索引中的索引位置对应的内存空间置空。
可见,针对“键”-“值”的应用方式,可以删除某个“键”对应的所有的“值”,即“值”的数据集合,也可以删除某个“键”对应的所有的“值”中指定的“值”。具体地,可以删除某个“键”对应的所有的“值”中某些相同的“值”,也可以删除某个“键”对应的所有的“值”中指定的一个“值”或多个不同的“值”。
通过本发明实施例的一种多值数据存储的方法,通过两级索引方式实现了多值数据可持续性的动态处理,大大提高了数据处理效率。
第二个实施例
图5是本发明的第二个实施例中多值数据读取的方法的流程示意图,其中读取操作基于本发明的第一个实施例中多值数据存储的方法中相同的数据结构。
具体地,参见图5,多值数据读取的方法包括步骤:
S301、至少一个数据值读取时,从第一级索引中确定待查找的索引位置;
S302、根据所述索引位置,查找所述至少一个数据值对应的第二级索引;
S303、根据所述第二级索引返回所述至少一个数据值;
其中,所述第一级索引包括至少一个索引位置,第一级索引的每个索引位置对应一个所述第二级索引,所述第二级索引包括至少一个索引位置,第二级索引的每个索引位置对应一个数据值。
具体地,针对不同情况,步骤S3可具体为:
当所述至少一个数据值为第一级索引的某个索引位置对应的第二级索引中所有数据值的集合时,返回第二级索引对应的所有数据值的集合。
当所述至少一个数据值为第一级索引的某个索引位置对应的第二级索引中指定的至少一个数据值时,从所述第二级索引的指定索引位置中返回所述至少一个数据值。
如,针对“键”-“值”的应用方式,可以使函数方法返回某个“键”对应的所有的“值”,即“值”的数据集合,返回的数据集合中各“值”的顺序,按照其存储顺序或存储顺序的倒序。
也可以根据需要使函数方法返回某个“键”对应的所有的“值”中指定的“值”。具体地,可以返回某个“键”对应的所有的“值”中某些相同的“值”,也可以返回某个“键”对应的所有的“值”中指定的一个“值”或多个不同的“值”。
优选地,从第一级索引中通过集合迭代形式对比、二分法或哈希码比对的方式确定待查找的索引位置。
从第二级索引中通过集合迭代形式对比、二分法或哈希码比对的方式确定所述指定索引位置,从所述指定索引位置中返回至少一个数据值。
通过本发明实施例的一种多值数据读取的方法,除了实现多值数据返回,还通过两级索引数据存储结构方式实现了多值数据可持续性的动态处理,大大提高了数据处理效率。
第三个实施例
更进一步地,下面为本发明的第三个实施例,通过一些代码示例来对本发明的实现方式进行说明。在该实施例中,优选采用Java语言定义了数据访问接口,利用集合实现此接口,从而实现了多值数据的存储、查找读取和删除。其中,本发明的实施例中,ImultiList为本发明的实施例中自定义的对象名,MultiList为现有的对象名,该实施例中数据访问接口优选的通用表示方式可以为:
IMultiList(Interface):
1.voidput(Stringkey,Objectvalue);
添加数据,以String类型为key值存储数据;
2.voidremove(Stringkey);
移除一个以键值为key值的数据集合;
3.voidremove(Objectvalue);
移除所有数据为value的数据(有可能为多条数据);
4.voidremove(Stringkey,Objectvalue);
移除一个以key和value为条件的数据(可能为多条数据);
5.Object[][]getValues(Stringkey);
获取当前存储的数据集合。
在该实施例中,采用集合对象表示并操作其中的各数据,形式为:
MultiList:
1.privateString[]keys;
存储所有的key值;
2.privateObject[][]values;
存储数据值的数据集合;
3.privateintkeyCount=0;
当前keys计数器,记录当前keys大小(即,keys当中key数量);
4.privateint[]keyValueCount;
当前每个key对应的数据集合的计数器;
5.privateintdefalutCapacity=16;
默认的初始的keys/数据集合的数据容量和每次增量容量。
可以看出,在该实施例中存在两类计数器,第一计数器对第一级索引的当前计数位置进行记录,表示整个数据集合中已存储有多少个键(即第二级索引);第二计数器对第二级索引的当前计数位置进行记录,表示该键中已存储有多少个值。计数器主要在数据存储过程中使用,一般使用一个第一计数器和至少一个第二计数器,每个第二计数器与一个第二级索引对应,计数器的初始值均为0。原则上,以键为数据索引对应存储数据值:先检查“键”是否存在,若存在直接获取“键”索引,再通过“键”索引找出“值”索引数组中当前集合的大小索引,随后通过“值”索引数组存储“值”;若不存在则先累加计数器,随后直接存储“键”、“值”数据。
采用程序方式表述时,上述添加数据(即实现上述IMultiList的put(Stringkey,Objectvalue)方法)的过程为:先检查key在第一级索引keys中是否存在,若存在直接获取key在keys中的索引位置index,通过index得到该key对应的第二级索引表示的集合,再根据该集合的第二计数器keyValueCount值得到该集合的大小作为索引位置valueIndex,赋值values[index][valueIndex]=value;第二计数器keyValueCount值累加;
若当前key不存在,直接使用第一级索引的第一计数器keyCount值作为该key在第一级索引中的索引位置,保存数据values[keyCount][0]=value;第一计数器keyCount值累加,并且增设该第二级索引的第二计数器,第二计数器keyValueCount值累加。
该实施例中,在初始化过程时设置缓冲区,设置其中第一级索引和第二级索引默认的初始数据容量、以及每次扩充时的增量容量均通过一默认容量值defalutCapacity控制(该值优选为16,也可根据需要进行设置和调整)。当某一计数器的计数值达到defalutCapacity值的整数倍时,表示当前集合对象中数据超出容量,此时自动对该集合对象的容量进行扩充,每次扩充容量增加一个defalutCapacity值。根据具体的计数器情况,扩充可以针对第一级索引进行也可以针对第二级索引进行,还可以同时对两级索引进行扩充。
以键为索引获取数据的过程是个查找两级索引的过程:可以直接获取所有已经存储的当前“键”对应的所有“值”的集合,即通过计算“键”索引位置,查找出对应的存储“值”的索引来获取该“键”对应的多个“值”。该过程不涉及计数器的操作,索引查找计算按照集合迭代形式对比、以二分法或哈希码比对的方式进行快速的查找,具体查找算法在本领域中已有过相当多的研究,本领域相关技术人员应能理解,各种相关数据(尤其是字符串数组)的查找算法均可适用于本发明,这里查找算法的方式和实现不应理解为对本发明的具体限制。
最后,该实施例中还可方便快捷地实现多值数据的删除。同样以键为索引删除对应的数据值,每个删除操作都循环地查找整个集合对象,移除所有满足条件的数据:具体地,也是通过索引列表,找到“键”对应的所有“值”的集合,将其内存空间置空,即实现了多值数据的删除。
本领域普通技术人员可以理解,实现上述第一个至第三个实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,包括上述实施例方法的各步骤,而所述的存储介质可以是:ROM/RAM、磁碟、光盘、存储卡等。
与本发明的多值数据存储、读取的方法相对应的,本发明还同时包括一种多值数据存储的装置、读取装置和存取系统,与上述方法步骤一一对应。
以下为本发明实施例提供的多值数据存储的装置、多值数据读取的装置、多值数据存取的系统的实施例,与上述的多值数据存储、读取的方法实施例属于同一构思,以下实施例中未详尽描述的细节内容,可以参考上述多值数据存储、读取的方法实施例。
第四个实施例
图6是本发明的第四个实施例中多值数据存储的装置的结构方框图。
如图6所示,一种多值数据存储的装置,包括:
确定单元501,用于在至少一个数据值存储时,确定第一级索引的各索引位置中是否存在至少一个数据值对应的第二级索引;
存储单元502,用于若确定单元501的确定结果为存在,则进一步获取所述第二级索引的当前计数位置,在所述第二级索引的当前计数位置后依次存入所述至少一个数据值;用于若确定单元501的确定结果为不存在,则直接以所述第一级索引的当前计数位置作为新第二级索引,在新第二级索引的各索引位置依次存入所述至少一个数据值;
其中,所述第一级索引包括至少一个索引位置,第一级索引的每个索引位置对应一个所述第二级索引,所述第二级索引包括至少一个索引位置,第二级索引的每个索引位置对应一个数据值。
该多值数据存储的装置,通过两级索引方式实现了多值数据可持续性的动态处理,大大提高了数据处理效率,对于程序开发使用非常方便。
第五个实施例
图7是本发明的第五个实施例中多值数据存储的装置的结构方框图。如图7所示,所述多值数据存储的装置包括:确定单元501、存储单元502、初始化单元503、容量控制单元504、删除单元505、第一计数器506、至少一个第二计数器507,其中,确定单元501和存储单元502与在第四个实施例中的相同,在此不再赘述。
具体地,括初始化单元503,用于在首次进行至少一个数据值存储之前,创建存储数据的内存空间,初始化第一级索引和第二级索引。
第一计数器506记录所述第一级索引的当前计数位置,每得到一个新二级索引时,所述第一计数器506的计数值累加;第二计数器507记录所述第二级索引的当前计数位置,每成功存储一个数据值,对应的所述第二计数器507的计数值累加。
在存储过程中,容量控制单元504,用于通过一容量值控制所述第一级索引和所述第二级索引默认的初始数据容量以及每次扩充时的增量容量;其中,当所述第一计数器506和/或所述第二计数器507的计数值达到所述容量值的整数倍时,所述容量控制单元504对所述第一级索引和/或所述第二级索引进行扩充。
所述删除单元505,用于在数据值删除时,若删除所述第一级索引的某个索引位置对应的第二级索引中所有数据值的集合时,从所述第一级索引的各索引位置中查找所述所有数据值的集合对应的第二级索引,将第一级索引的所述某个索引位置和所述所有数据值的集合对应的第二级索引中的所有索引位置对应的内存空间置空;若删除所述第一级索引的某个索引位置对应的第二级索引中指定的至少一个数据值时,从所述第一级索引的各索引位置中查找所述指定的至少一个数据值对应的第二级索引,随后进一步查找所述指定的至少一个数据值在所述第二级索引中的索引位置,将第一级索引的所述某个索引位置和所述指定的至少一个数据值在所述第二级索引中的索引位置对应的内存空间置空。
优选地,第一级索引为键索引,所述第二级索引为值索引,所述键索引中的每个索引位置为一个键,所述值索引中的每个索引位置为一个值,每个所述键具有唯一性。
该多值数据存储的装置,通过两级索引方式实现了多值数据可持续性的动态存储、删除,大大提高了数据处理效率,对于程序开发使用非常方便。
第六个实施例
图8是本发明的第六个实施例中多值数据读取的装置的结构方框图。如图8所示,所述多值数据读取的装置包括:第一查找单元701,用于至少一个数据值读取时,从第一级索引中确定待查找的索引位置;第二查找单元702,用于根据所述索引位置,查找所述至少一个数据值对应的第二级索引;返回单元703,用于根据所述第二级索引返回所述至少一个数据值;其中,所述第一级索引包括至少一个索引位置,第一级索引的每个索引位置对应一个所述第二级索引,所述第二级索引包括至少一个索引位置,第二级索引的每个索引位置对应一个数据值。
具体地,当所述至少一个数据值为第一级索引的某个索引位置对应的第二级索引中所有数据值的集合时,返回第二级索引对应的所有数据值的集合;当所述至少一个数据值为第一级索引的某个索引位置对应的第二级索引中指定的至少一个数据值时,从所述第二级索引的指定索引位置中返回所述至少一个数据值。
优选地,从第一级索引中通过集合迭代形式对比、二分法形式或哈希码比对方式确定待查找的索引位置。从第二级索引中通过集合迭代形式对比、二分法形式或哈希码比对形式确定所述指定索引位置,从所述指定索引位置中返回至少一个数据值。所述第一级索引为键索引,所述第二级索引为值索引,所述键索引中的每个索引位置为一个键,所述值索引中的每个索引位置为一个值,每个所述键具有唯一性。
该多值数据读取的装置,通过两级索引方式实现了多值数据可持续性的动态处理,大大提高了数据处理效率。
第七个实施例
图9是本发明的第七个实施例中多值数据存取的系统的结构方框图。如图9所示,所述多值数据存取的系统包括多值数据存储的装置和多值数据读取的装置。其中,多值数据存储的装置如第四个实施例或第五个实施例中的多值数据存储的装置,多值数据读取的装置如第六个实施例中的多值数据读取的装置
该多值数据存取的系统,通过两级索引方式实现了多值数据可持续性的动态存取,大大提高了数据处理效率。
相对于现有技术,本发明实施例对现有技术中的键值对的方式进行了改进,所采用的数据结构层次清晰,不必繁琐地新建对象集合,大幅改进了多值数据的处理效率。更进一步地,本发明实施例中给出了统一的数据访问接口、集合对象形式和函数方法在内的多值数据存取架构,不仅能够实现高效、安全、扩展性强和可重用性高的多值数据存取,还大大提高了数据处理的自由度和灵活性,对于程序开发使用非常方便。
虽然以上结合优选实施例对本发明进行了描述,但本领域的技术人员应该理解,本发明所述的方法和系统并不限于具体实施方式中所述的实施例,在不背离由所附权利要求书限定的本发明精神和范围的情况下,可对本发明作出各种修改、增加、以及替换。
Claims (20)
1.一种多值数据存储的方法,其特征在于,所述方法包括:
存储至少一个数据值时,确定第一级索引的各索引位置中是否存在所述至少一个数据值对应的第二级索引;
若所述第一级索引的各索引位置中存在所述至少一个数据值对应的第二级索引,则进一步获取所述第二级索引的当前计数位置,在所述第二级索引的当前计数位置后依次存入所述至少一个数据值;
若所述第一级索引的各索引位置中不存在所述至少一个数据值对应的第二级索引,则以所述第一级索引的当前计数位置作为新第二级索引,在新第二级索引的各索引位置依次存入所述至少一个数据值;
其中,所述第一级索引包括至少一个索引位置,所述第一级索引的每个索引位置对应一个所述第二级索引;所述第二级索引包括至少一个索引位置,所述第二级索引的每个索引位置对应一个数据值。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
删除所述第一级索引的某个索引位置对应的所述第二级索引中所有数据值的集合时,从所述第一级索引的各索引位置中查找所述所有数据值的集合对应的所述第二级索引,将所述第一级索引的所述某个索引位置和所述所有数据值的集合对应的所述第二级索引中的所有索引位置对应的内存空间置空。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
删除所述第一级索引的某个索引位置对应的所述第二级索引中指定的至少一个数据值时,从所述第一级索引的各索引位置中查找所述指定的至少一个数据值对应的所述第二级索引,查找所述指定的至少一个数据值在所述第二级索引中的索引位置,将所述第一级索引的所述某个索引位置和所述指定的至少一个数据值在所述第二级索引中的索引位置对应的内存空间置空。
4.根据权利要求1所述的方法,其特征在于,所述第一级索引的当前计数位置通过第一计数器记录,所述第二级索引的当前计数位置通过第二计数器记录;
每完成一个数据值的存储,对应的所述第二计数器的计数值累加;每得到一个新二级索引,所述第一计数器的计数值累加。
5.根据权利要求4所述的方法,其特征在于,所述第一级索引和所述第二级索引默认的初始数据容量以及每次扩充时的增量容量均通过一容量值控制;
当所述第一计数器的计数值达到所述容量值的整数倍时,对所述第一级索引进行扩充;
当所述第二计数器的计数值达到所述容量值的整数倍时,对所述第二级索引进行扩充。
6.根据权利要求1所述的方法,其特征在于,在首次进行所述至少一个数据值存储之前,包括:创建存储数据的内存空间,初始化所述第一级索引和所述第二级索引。
7.根据权利要求1所述的方法,其特征在于,所述第一级索引为键索引,所述第二级索引为值索引,所述键索引中的每个索引位置为一个键,所述值索引中的每个索引位置为一个值,每个所述键具有唯一性。
8.一种多值数据读取的方法,其特征在于,所述方法包括:
读取至少一个数据值时,从第一级索引中确定待查找的索引位置;
根据所述索引位置,查找所述至少一个数据值对应的第二级索引;
根据所述第二级索引返回所述至少一个数据值;
其中,所述第一级索引包括至少一个索引位置,所述第一级索引的每个索引位置对应一个所述第二级索引;所述第二级索引包括至少一个索引位置,所述第二级索引的每个索引位置对应一个数据值。
9.根据权利要求8所述的方法,其特征在于,当所述至少一个数据值为所述第一级索引的某个索引位置对应的所述第二级索引中所有数据值的集合时,所述根据所述第二级索引返回所述至少一个数据值,包括:返回所述第二级索引对应的所有数据值的集合。
10.根据权利要求8所述的方法,其特征在于,当所述至少一个数据值为所述第一级索引的某个索引位置对应的所述第二级索引中指定的至少一个数据值时,所述根据所述第二级索引返回所述至少一个数据值,包括:从所述第二级索引的指定索引位置中返回所述至少一个数据值。
11.根据权利要求8所述的方法,其特征在于,所述从第一级索引中确定待查找的索引位置,包括:从所述第一级索引中通过集合迭代形式对比、二分法或哈希码比对方式确定待查找的索引位置。
12.根据权利要求10所述的方法,其特征在于,所述从所述第二级索引的指定索引位置中返回所述至少一个数据值,包括:从所述第二级索引中通过集合迭代形式对比、二分法或哈希码比对方式确定所述指定索引位置,从所述指定索引位置中返回所述至少一个数据值。
13.根据权利要求8所述的方法,其特征在于,所述第一级索引为键索引,所述第二级索引为值索引,所述键索引中的每个索引位置为一个键,所述值索引中的每个索引位置为一个值,每个所述键具有唯一性。
14.一种多值数据存储的装置,其特征在于,所述装置包括:
确定单元,用于存储至少一个数据值时,确定第一级索引的各索引位置中是否存在所述至少一个数据值对应的第二级索引;
存储单元,用于若确定单元的确定结果为所述第一级索引的各索引位置中存在所述至少一个数据值对应的第二级索引,则进一步获取所述第二级索引的当前计数位置,在所述第二级索引的当前计数位置后依次存入所述至少一个数据值;用于若确定单元的确定结果为所述第一级索引的各索引位置中不存在所述至少一个数据值对应的第二级索引,则以所述第一级索引的当前计数位置作为新第二级索引,在新第二级索引的各索引位置依次存入所述至少一个数据值;
其中,所述第一级索引包括至少一个索引位置,所述第一级索引的每个索引位置对应一个所述第二级索引;所述第二级索引包括至少一个索引位置,所述第二级索引的每个索引位置对应一个数据值。
15.根据权利要求14所述的装置,其特征在于,所述装置还包括:
删除单元,用于在删除所述第一级索引的某个索引位置对应的所述第二级索引中所有数据值的集合时,从所述第一级索引的各索引位置中查找所述所有数据值的集合对应的所述第二级索引,将所述第一级索引的所述某个索引位置和所述所有数据值的集合对应的所述第二级索引中的所有索引位置对应的内存空间置空。
16.根据权利要求14所述的装置,其特征在于,所述装置还包括:
删除单元,用于在删除所述第一级索引的某个索引位置对应的所述第二级索引中指定的至少一个数据值时,从所述第一级索引的各索引位置中查找所述指定的至少一个数据值对应的所述第二级索引,查找所述指定的至少一个数据值在所述第二级索引中的索引位置,将所述第一级索引的所述某个索引位置和所述指定的至少一个数据值在所述第二级索引中的索引位置对应的内存空间置空。
17.一种多值数据读取的装置,其特征在于,所述装置包括:
第一查找单元,用于读取至少一个数据值时,从第一级索引中确定待查找的索引位置;
第二查找单元,用于根据所述索引位置,查找所述至少一个数据值对应的第二级索引;
返回单元,用于根据所述第二级索引返回所述至少一个数据值;
其中,所述第一级索引包括至少一个索引位置,所述第一级索引的每个索引位置对应一个所述第二级索引;所述第二级索引包括至少一个索引位置,所述第二级索引的每个索引位置对应一个数据值。
18.根据权利要求17所述的装置,其特征在于,当所述至少一个数据值为所述第一级索引的某个索引位置对应的所述第二级索引中所有数据值的集合时,所述根据所述第二级索引返回所述至少一个数据值,包括:返回所述第二级索引对应的所有数据值的集合。
19.根据权利要求17所述的装置,其特征在于,当所述至少一个数据值为所述第一级索引的某个索引位置对应的所述第二级索引中指定的至少一个数据值时,所述根据所述第二级索引返回所述至少一个数据值,包括:从所述第二级索引的指定索引位置中返回所述至少一个数据值。
20.一种多值数据存取的系统,其特征在于,所述系统包括:如权利要求14-16任一项所述的多值数据存储的装置,以及多值数据读取的装置;
所述多值数据读取的装置,包括:
第一查找单元,用于读取至少一个数据值时,从第一级索引中确定待查找的索引位置;
第二查找单元,用于根据所述索引位置,查找所述至少一个数据值对应的第二级索引;
返回单元,用于根据所述第二级索引返回所述至少一个数据值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410253318.0A CN105138528B (zh) | 2014-06-09 | 2014-06-09 | 一种多值数据存储、读取的方法和装置及其存取的系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410253318.0A CN105138528B (zh) | 2014-06-09 | 2014-06-09 | 一种多值数据存储、读取的方法和装置及其存取的系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105138528A true CN105138528A (zh) | 2015-12-09 |
CN105138528B CN105138528B (zh) | 2020-03-17 |
Family
ID=54723878
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410253318.0A Active CN105138528B (zh) | 2014-06-09 | 2014-06-09 | 一种多值数据存储、读取的方法和装置及其存取的系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105138528B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107844483A (zh) * | 2016-09-18 | 2018-03-27 | 腾讯科技(深圳)有限公司 | 文件管理方法及装置 |
CN110825959A (zh) * | 2019-09-30 | 2020-02-21 | 口口相传(北京)网络技术有限公司 | 数据发送方法及榜单数据获取模型的选择方法及装置 |
US10909185B2 (en) | 2018-01-25 | 2021-02-02 | Hewlett-Packard Development Company, L.P. | Databases to store metadata |
WO2023083237A1 (zh) * | 2021-11-11 | 2023-05-19 | 支付宝(杭州)信息技术有限公司 | 图数据的管理 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101060402A (zh) * | 2006-04-21 | 2007-10-24 | 盛趣信息技术(上海)有限公司 | 基于Hash-map的多点缓存装置 |
CN101075261A (zh) * | 2007-06-12 | 2007-11-21 | 腾讯科技(深圳)有限公司 | 索引压缩的方法和装置 |
CN101594316A (zh) * | 2008-05-30 | 2009-12-02 | 华为技术有限公司 | 一种分布式网络的管理方法、内容查询方法、系统及装置 |
CN101777016A (zh) * | 2010-02-08 | 2010-07-14 | 北京同有飞骥科技有限公司 | 一种连续数据保护系统的快照存储和数据恢复方法 |
CN102339284A (zh) * | 2010-07-16 | 2012-02-01 | 凌群电脑股份有限公司 | 数据库索引的建立方法及其电脑系统 |
CN103092906A (zh) * | 2011-11-04 | 2013-05-08 | Sap股份公司 | 用于扩展节点的多客户通用保持 |
CN103309950A (zh) * | 2013-05-22 | 2013-09-18 | 苏州雄立科技有限公司 | 一种键值搜索方法 |
CN103714121A (zh) * | 2013-12-03 | 2014-04-09 | 华为技术有限公司 | 一种索引记录的管理方法及装置 |
-
2014
- 2014-06-09 CN CN201410253318.0A patent/CN105138528B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101060402A (zh) * | 2006-04-21 | 2007-10-24 | 盛趣信息技术(上海)有限公司 | 基于Hash-map的多点缓存装置 |
CN101075261A (zh) * | 2007-06-12 | 2007-11-21 | 腾讯科技(深圳)有限公司 | 索引压缩的方法和装置 |
CN101594316A (zh) * | 2008-05-30 | 2009-12-02 | 华为技术有限公司 | 一种分布式网络的管理方法、内容查询方法、系统及装置 |
CN101777016A (zh) * | 2010-02-08 | 2010-07-14 | 北京同有飞骥科技有限公司 | 一种连续数据保护系统的快照存储和数据恢复方法 |
CN102339284A (zh) * | 2010-07-16 | 2012-02-01 | 凌群电脑股份有限公司 | 数据库索引的建立方法及其电脑系统 |
CN103092906A (zh) * | 2011-11-04 | 2013-05-08 | Sap股份公司 | 用于扩展节点的多客户通用保持 |
CN103309950A (zh) * | 2013-05-22 | 2013-09-18 | 苏州雄立科技有限公司 | 一种键值搜索方法 |
CN103714121A (zh) * | 2013-12-03 | 2014-04-09 | 华为技术有限公司 | 一种索引记录的管理方法及装置 |
Non-Patent Citations (1)
Title |
---|
倪显利: ""注册表及其管理类的开发和设计"", 《电脑编程技巧与维护》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107844483A (zh) * | 2016-09-18 | 2018-03-27 | 腾讯科技(深圳)有限公司 | 文件管理方法及装置 |
CN107844483B (zh) * | 2016-09-18 | 2020-07-28 | 腾讯科技(深圳)有限公司 | 文件管理方法及装置 |
US10909185B2 (en) | 2018-01-25 | 2021-02-02 | Hewlett-Packard Development Company, L.P. | Databases to store metadata |
CN110825959A (zh) * | 2019-09-30 | 2020-02-21 | 口口相传(北京)网络技术有限公司 | 数据发送方法及榜单数据获取模型的选择方法及装置 |
WO2023083237A1 (zh) * | 2021-11-11 | 2023-05-19 | 支付宝(杭州)信息技术有限公司 | 图数据的管理 |
Also Published As
Publication number | Publication date |
---|---|
CN105138528B (zh) | 2020-03-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102096639B (zh) | 用于修剪在非易失性闪速介质上的数据的方法 | |
CN102541927B (zh) | 一种实现数据缓存的方法和装置 | |
US20160117115A1 (en) | Disk partition stitching and rebalancing using a partition table | |
CN102722455B (zh) | 一种闪存设备中数据存储的方法及装置 | |
CN103164490B (zh) | 一种不固定长度数据的高效存储实现方法和装置 | |
CN105224370A (zh) | 一种加载elf文件的方法和装置 | |
CN105138528A (zh) | 一种多值数据存储、读取的方法和装置及其存取的系统 | |
CN104021145A (zh) | 一种混合业务并发访问的方法和装置 | |
US20130282676A1 (en) | Garbage collection-driven block thinning | |
CN104079613A (zh) | 用于多租户间共享应用程序对象的方法和系统 | |
CN103229164B (zh) | 数据访问方法和装置 | |
CN103455437A (zh) | 数据储存装置与数据储存装置操作方法 | |
CN104182508A (zh) | 一种数据处理方法和数据处理装置 | |
WO2014159390A1 (en) | Data storage volume having tiers of different storage traits | |
CN103677674A (zh) | 一种数据处理方法及装置 | |
CN104267981A (zh) | 一种加载桌面上的应用布局的方法及装置 | |
CN103106260B (zh) | 一种面向角色的虚拟文件系统的建立方法 | |
CN109542911A (zh) | 一种元数据组织方法、系统、设备及计算机可读存储介质 | |
CN104461384A (zh) | 一种数据写入方法及存储设备 | |
CN103746705A (zh) | 一种压缩矢量数据的方法 | |
CN105677805A (zh) | 一种利用protobuf的数据存储、读取方法及装置 | |
CN102331920A (zh) | 一种数据处理方法及装置 | |
CN104268097A (zh) | 一种元数据处理方法及系统 | |
CN105320669A (zh) | 数据存储、读取方法及数据存储、读取装置 | |
CN104572492A (zh) | 一种烧录数据到fat32分区的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |