CN107515867B - 一种NoSQL数据库的数据存储、查询方法和装置以及一种rowKey全组合的生成方法和装置 - Google Patents
一种NoSQL数据库的数据存储、查询方法和装置以及一种rowKey全组合的生成方法和装置 Download PDFInfo
- Publication number
- CN107515867B CN107515867B CN201610425195.3A CN201610425195A CN107515867B CN 107515867 B CN107515867 B CN 107515867B CN 201610425195 A CN201610425195 A CN 201610425195A CN 107515867 B CN107515867 B CN 107515867B
- Authority
- CN
- China
- Prior art keywords
- rowkey
- fields
- field
- new
- set number
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (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
本申请提供一种NoSQL数据库的数据存储方法,包括:获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;获取生成的每一个新的rowKey所对应的数据,并将所述数据存储于在所述NoSQL数据库中对应所述新的rowKey的一行。本申请还提供一种NoSQL数据库的查询方法和一种多字段rowKey的全组合的生成方法。本申请可以解决现有技术方案查询时间效率低并且无法做到直接生成rowKey全组合最优解的问题。
Description
技术领域
本申请涉及计算机数据库数据存储和数据查询技术领域,具体涉及一种NoSQL数据库的数据存储、查询方法和装置。本申请还涉及一种rowKey全组合的生成方法和装置。
背景技术
在大规模的分布式***的监控场景中,用户经常需要查询监控数据以及其历史数据。一方面,由于监控数据的数据量巨大,一般都存储监控数据于NoSQL数据库中;另一方面,由于监控数据通常都可以通过多个维度进行描述,查询时查询条件的字段组合形式也会非常多。这增加了数据库存储监控数据和建立其索引的复杂程度。
为了快速响应用户的查询监控数据的需求,大部分技术方案都采用以空间换时间的方式。取决于在数据库中存储原始数据份数的不同,实施以空间换时间的方式可以分为两类:一类是在NoSQL数据库中存储一份原始数据,为原始数据建立比较大的索引表来记录其不同字段组合成的过滤条件和对应原始数据的rowKey值;当用户进行查询时,从索引表获取到满足条件的rowKey值,再根据rowKey值进行具体原始数据的查询;另一类是在NoSQL数据库中存储多份原始数据,将原始数据按照其不同字段组合成的过滤条件来生成或查询直接对应的rowKey;当用户进行查询时,按照生成或查询到的rowKey来直接获取对应的原始数据。
无论采用以上哪一类方式,都需要计算和生成出多个字段rowKey的所有组合方法。目前被业界普遍用来生成这个多字段rowKey全组合的方法就是:直接循环枚举每个字段是否出现在查询条件中来生成了N个字段的全组合方式共2^N-1,再对每种组合方式生成相应的所有排列方式,最后再对生成序列的包含关系进行去重,从而得到最优解的rowKey全组合。
目前业界通用的生成多字段rowKey的全组合的方法的第一个缺点就是耗时时间较长,生成N个字段的全组合方式的时间复杂度是O(2^N),针对所有的序列需要生成相应的全排列方式平均至少也需要O((N/2)!),去重时由于最优解有C(N,Ceil(N/2))个,所以遍历时间最好的情况仍需要O(C(N,Ceil(N/2)));如果直接生成N个字段的全排列也需要O(N!),所以这种通用的生成全组合序列方法的时间复杂度会远大于O(2^N)*(C(N,Ceil(N/2)))。
业界通用的生成多字段rowKey的全组合的方法的第二个缺点,也是最严重的问题,是由于去重的比较都是按照前缀来做的,所以一般保留的结果都是长度为N的序列,因此这种去重的效果无法保证生成的序列是最优解。因为仅仅个数相同是远远不够的,还要保证能够形式的相同,否则在字段动态增加和减少的时候,重新生成了新的序列是和老的序列不兼容,会导致没有新字段的老数据无法再查询到。
发明内容
本申请提供一种NoSQL数据库的数据存储、查询方法和装置以及一种多字段rowKey的全组合的生成方法和装置,以解决现有技术方案查询时间效率低并且无法做到直接生成rowKey全组合最优解的问题。
本申请提供一种NoSQL数据库的数据存储方法,包括:
获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合;
依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;
获取生成的每一个新的rowKey所对应的数据,并将所述数据存储于在所述NoSQL数据库中对应所述新的rowKey的一行。
可选的,所述若所述rowKey中的字段的个数满足设定的条件,包括:
若所述rowKey中的字段的个数不小于比所述设定数量多一个的一半的向上舍入的整数。
可选的,在执行所述依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤之后,执行下述步骤:
集合生成的各个新的rowKey,生成比所述设定数量多一个字段的rowKey全组合。
可选的,所述方法,包括:
获取按照指定的字段不重复顺序排列的设定数量个字段;
以所述设定数量个字段中的第1个字段生成一个新的rowKey,生成1个字段的rowKey全组合;
获取生成的新的rowKey所对应的数据,并将所述数据存储于在所述NoSQL数据库中对应所述新的rowKey的一行;
依次以所述设定数量的字段中的第2个至第设定数量个字段作为待添加的字段,使用权利要求3所述的NoSQL数据库的数据存储方法,以存储每一个新的rowKey所对应的数据和生成2个至所述设定数量个字段的rowKey全组合。本申请提供一种NoSQL数据库的数据存储装置,包括:
获取rowKey全组合和字段单元,用于获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合;
生成新的rowKey单元,用于依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;
存储rowKey对应的数据单元,用于获取生成的每一个新的rowKey所对应的数据,并将所述数据存储于在所述NoSQL数据库中对应所述新的rowKey的一行。
可选的,所述若所述rowKey中的字段的个数满足设定的条件,包括:
若所述rowKey中的字段的个数不小于比所述设定数量多一个的一半的向上舍入的整数。
可选的,在触发所述生成新的rowKey单元之后,触发下述单元:
生成rowKey全组合单元,用于集合生成的各个新的rowKey,生成比所述设定数量多一个字段的rowKey全组合。
可选的,所述装置,包括:
获取字段单元,用于获取按照指定的字段不重复顺序排列的设定数量个字段设定数量;
生成1个字段的rowKey全组合单元,用于以所述设定数量个字段中的第1个字段生成一个新的rowKey,生成1个字段的rowKey全组合;
存储1个字段的rowKey全组合数据单元,用于获取生成的新的rowKey所对应的数据,并将所述数据存储于在所述NoSQL数据库中对应所述新的rowKey的一行;
存储2个至设定数量个字段的rowKey全组合数据单元,用于依次以所述设定数量的字段中的第2个至第设定数量个字段作为待添加的字段,使用权利要求3所述的NoSQL数据库的数据存储方法,以存储每一个新的rowKey所对应的数据和生成2个至所述设定数量个字段的rowKey全组合。
本申请提供一种NoSQL数据库的数据存储电子设备,包括:
显示器;
处理器;
存储器,用于存储NoSQL数据库的数据存储的程序,所述程序在被所述处理器读取执行时,执行如下操作:获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合;依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;获取生成的每一个新的rowKey所对应的数据,并将所述数据存储于在所述NoSQL数据库中对应所述新的rowKey的一行。
本申请提供一种NoSQL数据库的数据查询方法,应用于所述的数据存储方法所建立的NoSQL数据库,其特征在于,包括:
按照查询条件组合待查询的字段,形成查询字段;
根据所述查询字段查询所述查询字段所对应的rowKey;
根据查询到的rowKey,在所述NoSQL数据库中获取查询到的rowKey所对应的数据。
本申请提供一种NoSQL数据库的数据查询装置,应用于所述的数据存储装置所建立的NoSQL数据库,其特征在于,包括:
形成查询字段单元,用于按照查询条件组合待查询的字段,形成查询字段;
查询rowKey单元,用于根据所述查询字段查询所述查询字段所对应的rowKey;
查询数据库数据单元,用于根据查询到的rowKey,在所述NoSQL数据库中获取查询到的rowKey所对应的数据。
本申请提供一种rowKey全组合的生成方法,包括:
获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合;
依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;
集合生成的各个新的rowKey,生成比所述设定数量多一个字段的rowKey全组合。
可选的,所述若所述rowKey中的字段的个数满足设定的条件,包括:
若所述rowKey中的字段的个数不小于比所述设定数量多一个的一半的向上舍入的整数。
可选的,所述方法,包括:
获取按照指定的字段不重复顺序排列的设定数量个字段;
以所述设定数量个字段中的第1个字段生成一个新的rowKey,生成1个字段的rowKey全组合;
依次以所述设定数量个字段中的第2个至第设定数量个字段作为待添加的字段,使用权利要求10所述的rowKey全组合的生成方法,以生成2个至设定数量个字段的rowKey全组合。
本申请还提供一种rowKey全组合的生成装置,包括:
获取rowKey全组合和字段单元,用于获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合;
生成新的rowKey单元,用于依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;
生成rowKey全组合单元,用于集合生成的各个新的rowKey,生成比所述设定数量多一个字段的rowKey全组合。
可选的,所述若所述rowKey中的字段的个数满足设定的条件,包括:
若所述rowKey中的字段的个数不小于比所述设定数量多一个的一半的向上舍入的整数。
可选的,所述方法,包括:
获取字段单元,用于获取按照指定的字段不重复顺序排列的设定数量个字段;
生成1个字段的rowKey全组合单元,用于以所述设定数量个字段中的第1个字段生成一个新的rowKey,生成1个字段的rowKey全组合;
生成2个至设定数量个字段的rowKey全组合单元,用于依次依次以所述设定数量个字段中的第2个至第设定数量个字段作为待添加的字段,使用权利要求10所述的rowKey全组合的生成方法,以生成2个至设定数量个字段的rowKey全组合。
本申请还提供一种rowKey全组合的生成电子设备,包括:
显示器;
处理器;
存储器,用于存储rowKey全组合的生成的程序,所述程序在被所述处理器读取执行时,执行如下操作:获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合;依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;集合生成的各个新的rowKey,生成比所述设定数量多一个字段的rowKey全组合。
与现有技术相比,本申请具有以下优点:
本申请的技术方案数据存储和查询的时间效率比较高。本申请可以使设定数量个字段的rowKey全组合按照流程动态地从比设定数量少一个字段的rowKey全组合生成出来,在时间效率上优于现有生成多字段rowKey全组合的方法;而且本申请可以直接生成rowKey全组合最优解,不需要再进行现有方法消耗***资源的去重判断环节。因而在进行NoSQL数据库的数据存储和查询时,可以获得更好的查询时间效率。
本申请在NoSQL数据库中进行数据存储时具有良好的扩展性。本申请的技术方案在字段增加的情况下,可以在原数据存储的基础上直接将增加字段的新rowKey所对应的数据进行扩展存储,不影响未扩展前的数据的存储和查询。
本申请的方法可以获得不建立索引表、使用冗余存储进行NoSQL数据查询的方法中数据存储份数最少、扩展性最好的数据存储和查询方案;并且本申请降低了现有方法的数据存储复杂度,属于利用空间换时间又对空间进行最高程度优化的方法。
附图说明
图1是本申请第一实施例提供的一种NoSQL数据库的数据存储方法实施例流程图;
图2是本申请第一实施例提供的一种NoSQL数据库的数据存储方法实施例字段扩展过程第一示意图;
图3是本申请第一实施例提供的一种NoSQL数据库的数据存储方法实施例字段扩展过程第二示意图;
图4是本申请第二实施例提供的一种NoSQL数据库的数据存储方法实施例流程图;
图5是本申请第三实施例提供的一种NoSQL数据库的数据存储装置实施例示意图;
图6是本申请第四实施例提供的一种NoSQL数据库的数据存储装置实施例示意图;
图7是本申请第五实施例提供的一种NoSQL数据库的数据存储电子设备实施例示意图;
图8是本申请第六实施例提供的一种NoSQL数据库的数据查询方法实施例流程图;
图9是本申请第七实施例提供的一种NoSQL数据库的数据查询装置实施例示意图;
图10是本申请第八实施例提供的一种rowKey全组合的生成方法实施例流程图;
图11是本申请第九实施例提供的另一种rowKey全组合的生成方法实施例流程图;
图12是本申请第十实施例提供的一种rowKey全组合的生成装置实施例示意图;
图13是本申请第十一实施例提供的一种rowKey全组合的生成装置实施例示意图;
图14是本申请第十二实施例提供的一种rowKey全组合的生成电子设备实施例示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
本申请提供了一种NoSQL数据库的数据存储方法、装置和电子设备,一种NoSQL数据库的数据查询方法和装置,以及一种多字段rowKey的全组合的生成方法、装置和电子设备。本申请属于不使用索引表、在NoSQL数据库中存储多份数据、通过rowKey直接存储和查询数据的技术方案。下面依次结合附图对本申请的具体实施例进行详细说明。
请参考图1,其为本申请第一实施例提供的一种NoSQL数据库的数据存储方法实施例流程图。本实施例的存储方法是一个递归的方法,是基于在数据库中已经存储完成多字段的rowKey全组合所对应的数据,对增加1个字段的rowKey全组合所对应的数据进行存储。具体的,所述NoSQL数据库的数据存储方法,包括:
步骤S101:获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合。
字段是NoSQL数据库中所使用的字段,rowKey是NoSQL数据库中所使用的上述字段的组合,rowKey全组合是各个rowKey的集合。在下面具体实施例中,不再对此赘述。
获取设定数量个字段的rowKey全组合,即获取由设定数量个字段所组合的各个rowKey的集合;获取1个待添加字段,即获取准备在所述设定数量个字段所组合的各个rowKey之上添加的字段。
例如,在本实施例中,以3个字段为例,其按顺序前后排列分别是:集群cluster,主机host,和网卡名netName。获取3个字段的rowKey全组合即为获取cluster$host$netName,host$netName,netName$cluster这3个rowKey;获取1个待添加的字段,即为获取时间time这个字段。其中,$符号表示序列分隔符。
步骤S103:依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey。
按顺序逐一对设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,具体是:在所述rowKey即字段的组合的最后一个字段之后加上所述待添加的字段,生成一个新的字段的组合即新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey的第一个字段之前加上所述待添加的字段并去除所述rowKey中的最后一个所述字段,生成一个新的字段的组合即新的rowKey。
所述若所述rowKey中的字段的个数满足设定的条件,包括:若所述rowKey中的字段的个数不小于比所述设定数量多一个的一半的向上舍入的整数。
如果所述rowKey中的字段的个数不小于比所述设定数量多一个的一半的向上舍入的整数,即所述rowKey中的字段的个数不小于比所述设定数量多一个的一半的Ceiling取整数的函数,则则在所述rowKey的第一个字段之前加上所述待添加的字段并去除所述rowKey中的最后一个所述字段,生成一个新的字段的组合即新的rowKey。
在本步骤中,设定数量个字段的rowKey全组合有多少个rowKey则依次循环执行添加字段的步骤多少次,每次都生成1个或2个新的rowKey。例如,在本实施例中,3个字段的rowKey全组合有3个rowKey,即cluster$host$netName,host$netName,netName$cluster,在添加一个新的rowKey即字段time时,则首先针对第一个rowKey即cluster$host$netName执行添加字段的步骤,在cluster$host$netName后加上time,生成一个新的rowKey即cluster$host$netName$time;再判断第一个rowKey中的字段的个数,即3,是否不小于比所述设定数量多一个的一半的向上舍入的整数,即3+1=4的一半为2向上舍入的整数仍为2,此时一个rowKey中的字段的个数3不小于2,则在第一个字段cluster$host$netName之前加上time并去除最后一个所述字段netName,生成一个新的rowKey即time$cluster$host;之后进行对第二个rowKey即host$netName执行添加字段的步骤,在host$netName后加上time,生成一个新的rowKey即host$netName$time;再判断第二个rowKey中的字段的个数,即2,是否不小于比所述设定数量多一个的一半的向上舍入的整数,即2+1=3的一半为1.5向上舍入的整数为2,此时第二个rowKey中的字段的个数不小于设定条件,则第二个rowKey即host$netName前加上待添加的字段并去除第二个rowKey中的最后一个字段即netName,生成一个新的rowKey即time$host;重复这个过程可以获得另外两个新的rowKey,即netName$cluster$time和time$netName。这样,在依次循环执行添加字段的步骤3次添加1个字段time,可以获得6个新的rowKey,即cluster$host$netName$time,host$netName$time,netName$cluster$time,time$cluster$host,time$host,和time$netName。
本步骤事实上也生成了比设定数量多一个字段的rowKey全组合,可以选择进行集合生成的各个新的rowKey来生成比设定数量多一个字段的rowKey全组合,即可选步骤:
步骤S104:集合生成的各个新的rowKey,生成比所述设定数量多一个字段的rowKey全组合。
本申请的核心问题就是如何生成所有存储和查询字段rowKey的序列,即rowKey全组合。下面对本申请使用的生成新的rowKey方法的可行性进行说明。
首先在此统一几个下面所使用的术语:
全组合:多个字段的组合方式,与出现的先后顺序无关。
全排列:多个字段的排列方式,与出现的先后顺与有关。
a^b:代表a的b次方。
C(m,n):代表m中任意取n个元素的序列个数。
Ceil(n):代表n向上取整的值。
O(n):代表时间或空间复杂度的表达式阶数为n。
N!:代表N的阶乘。
假设目前需要用来作为查询条件的字段有N个,对它们按照字典序进行排序,在这里为了简化说明设定排序后的字段为X1,X2…XN,并将其保存在数组S[N]中,其中数组下标范围为0<=n<N。则问题就具体可以描述为如何生成X1,X2…XN这N个元素的全组合序列的数组C[N]。可以认为在C[N-1]中每个序列有两种选择,一种是在序列每个元素的后面加上XN元素,还有一种就是在当前序列最前边加入XN元素并去掉最后一个元素,因此该问题可以直观的由一颗二叉树的示意图来描述,其中左子树代表在前边加入XN元素,右子树代表在加入XN元素并去掉最后一个元素。
如图2所示,可以看到图2中第N层为加入字段XN对应的全组合序列范围,所有序列的长度都在Ceil(N/2)~N的闭区间内,按照长度相同与否进入相应的圆圈中。看到图中标注冗余的部分,它们对应流程图中加入字段XN(此时N为奇数)时,C[N-1]中的序列小于Ceil(N/2)而被抛弃的情况。可以通过枚举的方法来验证上述N∈[1,4]的时候均满足所有字段构成的查询条件的组合方式。
下面来证明本申请方法的性质1:当N=2k时,序列长度为k+i(0<=i<k)的位置的所有序列前k-i-1个字段都可以在长度为k+i+1的位置找到以它为前缀的序列。当N=2k+1时,序列长度为k+i(0<=i<=k)的位置的所有序列前k-i个字段都可以在长度为k+i+1的位置找到以它为前缀的序列。
从上述图2的第2层可以看到,长度为1的集合的前0个元素为空,不需要比较,可以认为它是长度为2中的所有序列的前缀。在示意图中的第3层可以看到,长度为1的集合的前1个元素为X3,它是长度为2中的序列X3X1的前缀;长度为2的集合的前0个元素为空,不需要比较,也可以认为它是长度为3中的所有序列的前缀。在示意图中的第4层可以看到,长度为2的集合的前1个元素都是X4;在长度为3的集合中有X4X1X2序列以它为前缀,长度为3的前0个字段在长度为4的序列中能找到以它为前缀的序列,均满足性质1。
如图3所示,当N=2k时,假设其满足性质1,则2k+1中长度为k+i(0<i<=k)的位置以X2k+1开头的序列与2k+1中长度为k+i+1(0<i<=k)的位置以X2k+1开头的对比发现,k+i位置的第2~k+i字段继承自2k中长度为k+i的位置,k+i+1位置的第2~k+i+1字段继承自2k中长度为k+i+1的位置,由假设得到继承的部分有k-i-1长度是满足前缀关系的,再加上最前边的X2k+1可以得到以X2k+1开头的部分是满足性质1的。同理,以X2k+1作为结尾的时候,从2k中长度为k+i-1处继承有k-i长度满足前缀关系,因此以X2k+1作为结尾的时候也满足性质1。考虑边界情况,2k+1层的k位置只继承自2k层的k位置,同上可以得到以X2k+1开头的部分是满足性质1的,即在k位置长度为k的前k个字段都是前缀,所以这部分是完全多余的,其对应的是图中黄色部分,即被2k+1层由于长度问题抛弃的部分;2k+1层的2k+1位置只继承自2k层的2k位置,同上可以得到以X2k+1结尾的部分是满足性质1的。综上当N=2k时可以得到N=2k+1时候满足性质1。同理也可以证明当N=2k+1满足性质1时,可以证明N=2k+2时也满足性质1。因为已经验证了N=2,3,4时候的可行性,则由数据归纳法可知,性质1成立。
假设按照本申请方法生成的序列组合C[n]是可行的,即C[n]满足了所有字段的组合可能,则对C[n]中所有序列都在最前边加上XN+1可以得到以XN+1开头的A部分,和在所有序列最后边加上XN+1以XN+1结尾的B部分,它们共同构成了候选序列组合,则针对字段个数为i(1<=i<=N+1)的组合,当i个字段不包含XN+1时,其所有组合可能以被B部分的C[n]前缀包含,即被B部分包含;当i个字段包含XN+1时,则应该包含其它i-1个字段的所有可能组合,这刚刚好被A部分的2~i位置即C[n]前i-1个字段的所有组合所满足。因此可以得到候选序列组合可以覆盖所有组合方式,是可行的。当N+1为偶数时,候选序列组合就是本文生成方法得到的组合;当N+1为奇数时,可以由性质1发现N/2处的数据是完全冗余的(请参考图2、图3中标记的冗余部分),因此候选序列组合排除掉冗余的序列即是本文的生成方式得到的组合。综上可以得到C[N-1]覆盖所有组合方式;因为已经验证了N=2,3的可行性,由数学归纳法可推出本申请方法在N>=4之后也是可行的。
因为C(n)是一个有极值的函数,在n=Ceil(N/2)取极值,即最大值,因此C[N]>=C(N,Ceil(N/2))。同上,可以由数学归纳法证明第N层的长度为i(Ceil(N/2)<=i<N)的序列个数为C(N,i)-C(N,i+1)。因此通过累加可以得到C[N]的个数为C(N,Ceil(N/2)),即C[N]不可能再小了,本申请方法得到的是最优解。且很容易推出最坏时间效率也小于N*C(N,Ceil(N/2))。
步骤S105:获取生成的每一个新的rowKey所对应的数据,并将所述数据存储于在所述NoSQL数据库中对应所述新的rowKey的一行。
对步骤S103中生成的每一个新的rowKey,获取其所对应的数据,并将每一个新的rowKey所对应的数据存储于在所述NoSQL数据库中对应每一个新的rowKey的一行。
例如,在本实施例中,生成了6个新的rowKey,则将这6个rowKey即cluster$host$netName$time,host$netName$time,netName$cluster$time,time$cluster$host,time$host,和time$netName所对应的数据分别存储于所述NoSQL数据库中对应其rowKey的一行。
存储数据的操作可以在步骤S103完全完成之后进行,也可以和S103同时进行,生成一个新的rowKey即存储一个对应生成的新rowKey的数据。
请参看图4,其为本申请第二实施例提供的一种NoSQL数据库的数据存储方法实施例流程图。本实施例适用于有若干个字段但未在NoSQL数据库中存储对应这些字段的任何数据的情形。所述方法,包括:
步骤S201:获取按照指定的字段不重复顺序排列的设定数量个字段。
设定的字段不重复顺序可以是字典字段正序、字典字段逆序或其他字段不重复的前后排列顺序。
获取一定字段不重复顺序排列的设定数量个字段。例如,本实施例中,获取按顺序排列的4个字段:集群cluster,主机host,网卡名netName,和时间time。
步骤S203:以所述设定数量个字段中的第1个字段生成一个新的rowKey,生成1个字段的rowKey全组合。
以获取的字段中的第一个字段形成一个新的rowKey,即新的rowKey为第一个字段,再生成1个字段的rowKey全组合;此时1个字段的rowKey全组合之中只有1个rowKey,即第一个字段。
例如,本实施例中,以第一个字段集群cluster,生成一个新的rowKey,即cluster,再生成1个字段的rowKey全组合,其包括cluster。
步骤S205:获取生成的新的rowKey所对应的数据,并将所述数据存储于在所述NoSQL数据库中对应所述新的rowKey的一行。
获取生成的新的rowKey所对应的数据,并将生成的新的rowKey所对应的数据存储于在所述NoSQL数据库中对应所述新的rowKey的一行。
例如,本实施例中,即为获取cluster所对应的数据并将其存储于在所述NoSQL数据库中对应cluster这一rowKey的一行。
步骤S207:依次以所述设定数量的字段中的第2个至第设定数量个字段作为待添加的字段,使用第一实施例所述的NoSQL数据库的数据存储方法,以存储每一个新的rowKey所对应的数据和生成2个至所述设定数量个字段的rowKey全组合。
按顺序逐一将获取的字段的第2个至第设定数量个字段作为依次待添加的字段,使用所述NoSQL数据库的数据存储方法,即步骤S101,S103,S104和S105,生成各个新的rowKey,获取各个新的rowKey所对应的数据,将获取各个新的rowKey所对应的数据存储于对应各个新的rowKey的各行,以及生成2个至设定数量个字段的rowKey全组合。
例如,本实施例中,以1个字段的rowKey全组合为基础,依次采用主机host,网卡名netName和时间time作为待添加的字段,使用所述NoSQL数据库的数据存储方法,即步骤S101至S105,生成2个字段的2个新的rowKey:cluster$host,host;3个字段的3个新的rowKey:cluster$host$netName,host$netName,netName$cluster;4个字段的6个新的rowKey:cluster$host$netName$time,host$netName$time,netName$cluster$time,time$cluster$host,time$host,和time$netName;将这11个新的rowKey所对应的数据存储于所述NoSQL数据库中对应11个新的rowKey的各行;并生成2个至4个字段的rowKey全组合。
请参看图5,其为本申请第三实施例提供的一种NoSQL数据库的数据存储装置实施例示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅为示意性的。所述NoSQL数据库的数据存储装置,包括:
获取rowKey全组合和字段单元301,用于获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合;
生成新的rowKey单元303,用于依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;
存储rowKey对应的数据单元305,用于获取生成的每一个新的rowKey所对应的数据,并将所述数据存储于在所述NoSQL数据库中对应所述新的rowKey的一行。
在触发所述生成新的rowKey单元之后,也可以触发生成rowKey全组合单元306,所述生成rowKey全组合单元306,用于集合生成的各个新的rowKey,生成设定数量个字段的rowKey全组合
请参看图6,其为本申请第四实施例提供的一种NoSQL数据库的数据存储装置实施例示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅为示意性的。所述NoSQL数据库的数据存储装置,包括:
获取字段单元401,用于获取按照指定的字段不重复顺序排列的设定数量个字段;
生成1个字段的rowKey全组合单元403,用于以所述设定数量个字段中的第1个字段生成一个新的rowKey,生成1个字段的rowKey全组合;
存储1个字段的rowKey全组合数据单元405,用于获取生成的新的rowKey所对应的数据,并将所述数据存储于在所述NoSQL数据库中对应所述新的rowKey的一行;
存储2个至设定数量个字段的rowKey全组合数据单元407,用于依次以所述设定数量的字段中的第2个至第设定数量个字段作为待添加的字段,触发第三实施例所述的NoSQL数据库的数据存储装置,存储每一个新的rowKey所对应的数据,以及生成2个至所述设定数量个字段的rowKey全组合。
请参看图7,其为本申请第五实施例提供的一种NoSQL数据库的数据存储电子设备实施例示意图。由于电子设备实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的电子设备实施例仅为示意性的。所述NoSQL数据库的数据存储电子设备,包括:显示器501,处理器503,存储器505;
所述存储器505,用于存储NoSQL数据库的数据存储的程序,所述程序在被所述处理器读取执行时,执行如下操作:获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合;依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;获取生成的每一个新的rowKey所对应的数据,并将所述数据存储于在所述NoSQL数据库中对应所述新的rowKey的一行。
请参考图8,其为本申请第六实施例提供的一种NoSQL数据库的数据查询方法实施例流程图。本实施例的查询方法与所述NoSQL数据库的数据存储方法配套使用,是对以所述NoSQL数据库的数据存储方法所存储的数据的查询。所述NoSQL数据库的数据查询方法,包括:
S601:按照查询条件组合待查询的字段,形成查询字段。
按照查询条件,选择不同的字段,并组合这些字段形成查询字段。
例如,本实施例中,查询网卡名netName为前缀以及集群cluster和主机host为前缀的所有rowKey对应的数据,即形成查询字段netName以及cluster$host。
S602:根据所述查询字段查询所述查询字段所对应的rowKey。
根据查询字段可以检索查询到符合条件的对应查询字段的rowKey。查询字段可以组成完整的一个rowKey进行查询,也可以只对rowKey的一部分进行查询。
例如,本实施例中,查询到cluster为前缀的rowKey有2个,分别为:netName$cluster和netName$cluster$time;查询到cluster$host为前缀的rowKey有3个,分别为:cluster$host,cluster$host$netName和cluster$host$netName$time。
S603:根据查询到的rowKey,在所述NoSQL数据库中获取查询到的rowKey所对应的数据。
根据查询到的rowKey,直接在所述NoSQL数据库中进行检索并获取查询到的rowKey所对应的数据。
例如,本实施例中,即为直接查询以netName为前缀的2个rowKey:netName$cluster和netName$cluster$time在数据库中对应的数据,以及直接查询以cluster$host为前缀的3个rowKey:cluster$host,cluster$host$netName和cluster$host$netName$time在数据库中对应的数据。
请参考图9,其为本申请第七实施例提供的一种NoSQL数据库的数据查询装置实施例示意图。本实施例的查询装置与所述NoSQL数据库的数据存储装置配套使用,是对以所述NoSQL数据库的数据存储装置所存储的数据的查询。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅为示意性的。具体的,所述NoSQL数据库的数据查询装置,包括:
形成查询字段单元701,用于按照查询条件组合待查询的字段,形成查询字段;
查询rowKey单元703,用于根据所述查询字段查询所述查询字段所对应的rowKey;
查询数据库数据单元705,用于根据查询到的rowKey,在所述NoSQL数据库中获取查询到的rowKey所对应的数据。
请参考图10,其为本申请第八实施例提供的一种rowKey全组合的生成方法实施例流程图。本实施例的生成方法是一个递归的方法,是基于已经存在多字段的rowKey全组合,生成对其增加1个字段的rowKey全组合。具体的,所述rowKey全组合的生成方法,包括:
步骤S801:获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合。
获取获取设定数量个字段的rowKey全组合,即获取由设定数量个字段所组合的各个rowKey的集合;获取1个待添加字段,即获取准备在所述设定数量个字段所组合的各个rowKey之上添加的字段。
例如,本实施例中,获取3个字段的rowKey全组合即为获取cluster$host$netName,host$netName,netName$cluster这3个rowKey;获取1个待添加的字段,即为获取时间time这个字段。
步骤S803:依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey。
按顺序逐一对设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,具体是:在所述rowKey即字段的组合的最后一个字段之后加上所述待添加的字段,生成一个新的字段的组合即新的rowKey;若大于或等于比设定数量多一个的一半的最小整数大于或等于所述rowKey中的所述字段的个数,则在所述rowKey的第一个字段之前加上所述待添加的字段并去除所述rowKey中的最后一个所述字段,生成一个新的字段的组合即新的rowKey。
所述若所述rowKey中的字段的个数满足设定的条件,包括:若所述rowKey中的字段的个数不小于比所述设定数量多一个的一半的向上舍入的整数。
如果所述rowKey中的字段的个数不小于比所述设定数量多一个的一半的向上舍入的整数,即所述rowKey中的字段的个数不小于比所述设定数量多一个的一半的Ceiling取整数的函数,则在所述rowKey的第一个字段之前加上所述待添加的字段并去除所述rowKey中的最后一个所述字段,生成一个新的字段的组合即新的rowKey。
在本步骤中,设定数量个字段的rowKey全组合有多少个rowKey则依次循环执行添加字段的步骤多少次,每次都生成1个或2个新的rowKey。详细添加过程请参考第一实施例。例如,在本实施例中,3个字段的rowKey全组合有3个rowKey,则依次循环执行添加字段的步骤3次添加时间time,获得6个新的rowKey,即cluster$host$netName$time,host$netName$time,netName$cluster$time,time$cluster$host,time$host,和time$netName。
以本步骤的方法添加字段生成rowKey的可行性已经在所述NoSQL数据库的数据存储方法实施例中进行了详细说明,在此不再赘述。
步骤S805:集合生成的各个新的rowKey,生成比设定数量多一个字段的rowKey全组合。
集合步骤S803生成的各个新的rowKey,则生成比设定数量多一个字段的rowKey全组合
例如,本实施例中,集合步骤S803生成的6个新的rowKey,即cluster$host$netName$time,host$netName$time,netName$cluster$time,time$cluster$host,time$host,和time$netName,即生成4个字段的rowKey全组合。
请参考图11,其为本申请第九实施例提供的另一种rowKey全组合的生成方法实施例流程图。所述rowKey全组合的生成方法,包括:
步骤S901:获取按照设定的字段不重复顺序排列的设定数量个字段。
设定的字段不重复顺序可以是字典字段正序、字典字段逆序或其他字段不重复的前后排列顺序。
获取一定字段不重复顺序排列的设定数量个字段。例如,本实施例中,获取按顺序排列的4个字段:集群cluster,主机host,网卡名netName,和时间time。
步骤S903:以所述设定数量个字段中的第1个字段生成一个新的rowKey,生成1个字段的rowKey全组合。
以获取的字段中的第一个字段形成一个新的rowKey,即新的rowKey为第一个字段,再生成1个字段的rowKey全组合;此时1个字段的rowKey全组合之中只有1个rowKey,即第一个字段。
例如,本实施例中,以第一个字段集群cluster,生成一个新的rowKey,即cluster,再生成1个字段的rowKey全组合,其包括cluster。
步骤S905:依次以所述设定数量个字段中的第2个至第设定数量个字段作为待添加的字段,使用所述rowKey全组合的生成方法,生成2个至设定数量个字段的rowKey全组合。
按顺序逐一将获取的字段的第2个至第设定数量个字段作为依次待添加的字段,使用第八实施例所述rowKey全组合的生成方法,即步骤S801至S805,生成各个新的rowKey;集合生成的各个新的rowKey,生成2个至设定数量个字段的rowKey全组合。
例如,本实施例中,以1个字段的rowKey全组合为基础,依次采用主机host,网卡名netName和时间time作为待添加的字段,使用所述NoSQL数据库的数据存储方法,即步骤S801至S805,集合2个字段的2个新的rowKey:cluster$host,host,生成2个字段的rowKey全组合;集合3个字段的3个新的rowKey:cluster$host$netName,host$netName,netName$cluster,生成3个字段的rowKey全组合;集合4个字段的6个新的rowKey:cluster$host$netName$time,host$netName$time,netName$cluster$time,time$cluster$host,time$host,和time$netName,生成4个字段的rowKey全组合。
请参看图12,其为本申请第十实施例提供的一种rowKey全组合的生成装置实施例示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅为示意性的。所述rowKey全组合的生成装置,包括:
获取rowKey全组合和字段单元1001,用于获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合;
生成新的rowKey单元1003,用用于依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;
生成rowKey全组合单元1005,用于集合生成的各个新的rowKey,生成比所述设定数量多一个字段的rowKey全组合。
请参看图13,其为本申请第十一实施例提供的一种rowKey全组合的生成装置实施例示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅为示意性的。所述rowKey全组合的生成装置,包括:
获取字段单元1101,用于获取按照指定的字段不重复顺序排列的设定数量个字段;
生成1个字段的rowKey全组合单元1103,用于以所述设定数量个字段中的第1个字段生成一个新的rowKey,生成1个字段的rowKey全组合;
生成2个至设定数量个字段的rowKey全组合单元1105,用于依次以所述设定数量个字段中的第2个至第设定数量个字段作为待添加的字段,使用所述的rowKey全组合的生成方法,以生成2个至设定数量个字段的rowKey全组合。
请参看图14,其为本申请第十二实施例提供的一种rowKey全组合的生成电子设备实施例示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的电子设备实施例仅为示意性的。所述rowKey全组合的生成电子设备,包括:显示器1201,处理器1203,存储器1205;
所述存储器1205,用于存储rowKey全组合的生成的程序,所述程序在被所述处理器读取执行时,执行如下操作:获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合;依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;集合生成的各个新的rowKey,生成比所述设定数量多一个字段的rowKey全组合。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、***或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
Claims (18)
1.一种NoSQL数据库的数据存储方法,其特征在于,包括:
获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合;
依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;
获取生成的每一个新的rowKey所对应的数据,并将所述数据存储于在所述NoSQL数据库中对应所述新的rowKey的一行;
其中,所述rowKey全组合是指基于在数据库中已经存储完成多字段的rowKey全组合。
2.根据权利要求1所述的NoSQL数据库的数据存储方法,其特征在于,所述若所述rowKey中的字段的个数满足设定的条件,包括:
若所述rowKey中的字段的个数不小于比所述设定数量多一个的一半的向上舍入的整数。
3.根据权利要求2所述的NoSQL数据库的数据存储方法,其特征在于,在执行所述依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤之后,执行下述步骤:
集合生成的各个新的rowKey,生成比所述设定数量多一个字段的rowKey全组合。
4.根据权利要求3所述的NoSQL数据库的数据存储方法,其特征在于,所述方法,包括:
获取按照指定的字段不重复顺序排列的设定数量个字段;
以所述设定数量个字段中的第1个字段生成一个新的rowKey,生成1个字段的rowKey全组合;
获取生成的新的rowKey所对应的数据,并将所述数据存储于在所述NoSQL数据库中对应所述新的rowKey的一行;
依次以所述设定数量的字段中的第2个至第设定数量个字段作为待添加的字段,使用权利要求3所述的NoSQL数据库的数据存储方法,以存储每一个新的rowKey所对应的数据和生成2个至所述设定数量个字段的rowKey全组合。
5.一种NoSQL数据库的数据存储装置,其特征在于,包括:
获取rowKey全组合和字段单元,用于获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合,所述rowKey全组合是指基于在数据库中已经存储完成多字段的rowKey全组合;
生成新的rowKey单元,用于依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;
存储rowKey对应的数据单元,用于获取生成的每一个新的rowKey所对应的数据,并将所述数据存储于在所述NoSQL数据库中对应所述新的rowKey的一行。
6.根据权利要求5所述的NoSQL数据库的数据存储装置,其特征在于,所述若所述rowKey中的字段的个数满足设定的条件,包括:
若所述rowKey中的字段的个数不小于比所述设定数量多一个的一半的向上舍入的整数。
7.根据权利要求6所述的NoSQL数据库的数据存储装置,其特征在于,在触发所述生成新的rowKey单元之后,触发下述单元:
生成rowKey全组合单元,用于集合生成的各个新的rowKey,生成比所述设定数量多一个字段的rowKey全组合。
8.根据权利要求7所述的NoSQL数据库的数据存储装置,其特征在于,所述装置,包括:
获取字段单元,用于获取按照指定的字段不重复顺序排列的设定数量个字段设定数量;
生成1个字段的rowKey全组合单元,用于以所述设定数量个字段中的第1个字段生成一个新的rowKey,生成1个字段的rowKey全组合;
存储1个字段的rowKey全组合数据单元,用于获取生成的新的rowKey所对应的数据,并将所述数据存储于在所述NoSQL数据库中对应所述新的rowKey的一行;
存储2个至设定数量个字段的rowKey全组合数据单元,用于依次以所述设定数量的字段中的第2个至第设定数量个字段作为待添加的字段,使用权利要求3所述的NoSQL数据库的数据存储方法,以存储每一个新的rowKey所对应的数据和生成2个至所述设定数量个字段的rowKey全组合。
9.一种NoSQL数据库的数据存储电子设备,其特征在于,所述电子设备包括:
显示器;
处理器;
存储器,用于存储NoSQL数据库的数据存储的程序,所述程序在被所述处理器读取执行时,执行如下操作:获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合;依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;获取生成的每一个新的rowKey所对应的数据,并将所述数据存储于在所述NoSQL数据库中对应所述新的rowKey的一行,其中,所述rowKey全组合是指基于在数据库中已经存储完成多字段的rowKey全组合。
10.一种NoSQL数据库的数据查询方法,应用于根据权利要求4所述的数据存储方法所建立的NoSQL数据库,其特征在于,包括:
按照查询条件组合待查询的字段,形成查询字段;
根据所述查询字段查询所述查询字段所对应的rowKey;
根据查询到的rowKey,在所述NoSQL数据库中获取查询到的rowKey所对应的数据;
其中,所述rowKey建立步骤是:依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;所述rowKey全组合是指基于在数据库中已经存储完成多字段的rowKey全组合。
11.一种NoSQL数据库的数据查询装置,应用于根据权利要求8所述的数据存储装置所建立的NoSQL数据库,其特征在于,包括:
形成查询字段单元,用于按照查询条件组合待查询的字段,形成查询字段;
查询rowKey单元,用于根据所述查询字段查询所述查询字段所对应的rowKey,其中,所述rowKey建立步骤是:依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;所述rowKey全组合是指基于在数据库中已经存储完成多字段的rowKey全组合;
查询数据库数据单元,用于根据查询到的rowKey,在所述NoSQL数据库中获取查询到的rowKey所对应的数据。
12.一种rowKey全组合的生成方法,其特征在于,包括:
获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合;
依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;
集合生成的各个新的rowKey,生成比所述设定数量多一个字段的rowKey全组合;
其中,所述rowKey全组合是指基于在数据库中已经存储完成多字段的rowKey全组合。
13.根据权利要求12所述的rowKey全组合的生成方法,其特征在于,所述若所述rowKey中的字段的个数满足设定的条件,包括:
若所述rowKey中的字段的个数不小于比所述设定数量多一个的一半的向上舍入的整数。
14.根据权利要求13所述的rowKey全组合的生成方法,其特征在于,所述方法,包括:
获取按照指定的字段不重复顺序排列的设定数量个字段;
以所述设定数量个字段中的第1个字段生成一个新的rowKey,生成1个字段的rowKey全组合;
依次以所述设定数量个字段中的第2个至第设定数量个字段作为待添加的字段,使用权利要求10所述的rowKey全组合的生成方法,以生成2个至设定数量个字段的rowKey全组合。
15.一种rowKey全组合的生成装置,其特征在于,包括:
获取rowKey全组合和字段单元,用于获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合,其中,所述rowKey全组合是指基于在数据库中已经存储完成多字段的rowKey全组合;
生成新的rowKey单元,用于依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;
生成rowKey全组合单元,用于集合生成的各个新的rowKey,生成比所述设定数量多一个字段的rowKey全组合。
16.根据权利要求15所述的rowKey全组合的生成装置,其特征在于,所述若所述rowKey中的字段的个数满足设定的条件,包括:
若所述rowKey中的字段的个数不小于比所述设定数量多一个的一半的向上舍入的整数。
17.根据权利要求16所述的rowKey全组合的生成装置,其特征在于,所述装置,包括:
获取字段单元,用于获取按照指定的字段不重复顺序排列的设定数量个字段;
生成1个字段的rowKey全组合单元,用于以所述设定数量个字段中的第1个字段生成一个新的rowKey,生成1个字段的rowKey全组合;
生成2个至设定数量个字段的rowKey全组合单元,用于依次依次以所述设定数量个字段中的第2个至第设定数量个字段作为待添加的字段,使用权利要求10所述的rowKey全组合的生成方法,以生成2个至设定数量个字段的rowKey全组合。
18.一种rowKey全组合的生成电子设备,其特征在于,所述电子设备包括:
显示器;
处理器;
存储器,用于存储rowKey全组合的生成的程序,所述程序在被所述处理器读取执行时,执行如下操作:获取设定数量个字段的包括至少一个不重复rowKey的rowKey全组合和一个待添加的字段;所述rowKey,包括:至少一个以上的不重复的所述设定数量个字段的组合;依次对所述设定数量个字段的rowKey全组合中的每一个rowKey,执行添加字段的步骤;所述添加字段的步骤,包括:在所述rowKey后加上所述待添加的字段,生成一个新的rowKey;若所述rowKey中的字段的个数满足设定的条件,则在所述rowKey前加上所述待添加的字段并去除所述rowKey中的最后一个字段,生成一个新的rowKey;集合生成的各个新的rowKey,生成比所述设定数量多一个字段的rowKey全组合,其中,所述rowKey全组合是指基于在数据库中已经存储完成多字段的rowKey全组合。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610425195.3A CN107515867B (zh) | 2016-06-15 | 2016-06-15 | 一种NoSQL数据库的数据存储、查询方法和装置以及一种rowKey全组合的生成方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610425195.3A CN107515867B (zh) | 2016-06-15 | 2016-06-15 | 一种NoSQL数据库的数据存储、查询方法和装置以及一种rowKey全组合的生成方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107515867A CN107515867A (zh) | 2017-12-26 |
CN107515867B true CN107515867B (zh) | 2021-06-29 |
Family
ID=60720047
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610425195.3A Active CN107515867B (zh) | 2016-06-15 | 2016-06-15 | 一种NoSQL数据库的数据存储、查询方法和装置以及一种rowKey全组合的生成方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107515867B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113821533B (zh) * | 2021-09-30 | 2023-09-08 | 北京鲸鹳科技有限公司 | 数据查询的方法、装置、设备以及存储介质 |
CN116561374B (zh) * | 2023-07-11 | 2024-02-23 | 腾讯科技(深圳)有限公司 | 基于半结构化存储的资源确定方法、装置、设备及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102999526A (zh) * | 2011-09-16 | 2013-03-27 | 阿里巴巴集团控股有限公司 | 一种数据库关系表的拆分、查询方法及*** |
CN103488704A (zh) * | 2013-09-06 | 2014-01-01 | 乐视致新电子科技(天津)有限公司 | 一种数据存储方法及装置 |
CN104102710A (zh) * | 2014-07-15 | 2014-10-15 | 浪潮(北京)电子信息产业有限公司 | 一种海量数据查询方法 |
CN104252536A (zh) * | 2014-09-16 | 2014-12-31 | 福建新大陆软件工程有限公司 | 一种基于hbase的上网日志数据查询方法及装置 |
CN104915450A (zh) * | 2015-07-01 | 2015-09-16 | 武汉大学 | 一种基于HBase的大数据存储与检索方法及*** |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014082198A1 (en) * | 2012-11-27 | 2014-06-05 | Nokia Siemens Networks Oy | Multiple fields parallel query method and corresponding storage organization |
CN104317966B (zh) * | 2014-11-18 | 2017-08-08 | 国家电网公司 | 一种用于电力大数据快速组合查询的动态索引方法 |
CN105354297B (zh) * | 2015-11-03 | 2019-03-26 | 浪潮(北京)电子信息产业有限公司 | 一种数据库中数据存储的方法及*** |
CN105426437A (zh) * | 2015-11-05 | 2016-03-23 | 西安翔迅科技有限责任公司 | 一种基于HBase的智能交通领域卡口数据存储方法 |
CN105488231B (zh) * | 2016-01-22 | 2018-07-20 | 杭州电子科技大学 | 一种基于自适应表维度划分的大数据处理方法 |
-
2016
- 2016-06-15 CN CN201610425195.3A patent/CN107515867B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102999526A (zh) * | 2011-09-16 | 2013-03-27 | 阿里巴巴集团控股有限公司 | 一种数据库关系表的拆分、查询方法及*** |
CN103488704A (zh) * | 2013-09-06 | 2014-01-01 | 乐视致新电子科技(天津)有限公司 | 一种数据存储方法及装置 |
CN104102710A (zh) * | 2014-07-15 | 2014-10-15 | 浪潮(北京)电子信息产业有限公司 | 一种海量数据查询方法 |
CN104252536A (zh) * | 2014-09-16 | 2014-12-31 | 福建新大陆软件工程有限公司 | 一种基于hbase的上网日志数据查询方法及装置 |
CN104915450A (zh) * | 2015-07-01 | 2015-09-16 | 武汉大学 | 一种基于HBase的大数据存储与检索方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN107515867A (zh) | 2017-12-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103703467B (zh) | 存储数据的方法和装置 | |
EP2069979B1 (en) | Dynamic fragment mapping | |
CN108205577B (zh) | 一种数组构建、数组查询的方法、装置及电子设备 | |
CN110147204B (zh) | 一种元数据落盘方法、装置、***及计算机可读存储介质 | |
CN109086456B (zh) | 数据索引方法及装置 | |
CN112667860A (zh) | 一种子图匹配方法、装置、设备及存储介质 | |
CN103002061A (zh) | 一种长域名与短域名互相转化的方法及装置 | |
CN107203532A (zh) | 索引***的构建方法、搜索的实现方法及装置 | |
CN107515867B (zh) | 一种NoSQL数据库的数据存储、查询方法和装置以及一种rowKey全组合的生成方法和装置 | |
CN109213445A (zh) | 一种存储***元数据的管理方法、管理***及相关装置 | |
CN107451204B (zh) | 一种数据查询方法、装置及设备 | |
KR100905434B1 (ko) | 실시간 색인 정보 추출 기능을 갖는 파일 업로드 방법 및 이를 이용한 웹 스토리지 시스템 | |
CN112800067B (zh) | 范围查询方法、装置、计算机可读存储介质及电子设备 | |
CN112035413B (zh) | 元数据信息查询方法、装置及存储介质 | |
CN102867023A (zh) | 一种栅格数据的存储、读取方法及装置 | |
CN110569291B (zh) | 一种数字货币钱包的密钥数据查询获取方法及装置 | |
CN110389953B (zh) | 基于压缩图的数据存储方法、存储介质、存储装置和服务器 | |
CN105302889B (zh) | 数据存储结构的转换方法及装置 | |
CN106777230B (zh) | 一种分区***、分区方法及装置 | |
CN107203550B (zh) | 一种数据处理方法和数据库服务器 | |
CN110083603B (zh) | 一种基于邻接表实现节点路径的查询方法及*** | |
CN110825747B (zh) | 一种信息存取方法、装置和介质 | |
CN114385624A (zh) | 编码方法、编码查找方法、装置、电子设备及存储介质 | |
CN111382120B (zh) | 一种小文件管理方法、***和计算机设备 | |
CN108984780B (zh) | 基于支持重复键值树数据结构管理磁盘数据的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
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 |