CN106844676A - 数据存储方法及装置 - Google Patents
数据存储方法及装置 Download PDFInfo
- Publication number
- CN106844676A CN106844676A CN201710054679.6A CN201710054679A CN106844676A CN 106844676 A CN106844676 A CN 106844676A CN 201710054679 A CN201710054679 A CN 201710054679A CN 106844676 A CN106844676 A CN 106844676A
- Authority
- CN
- China
- Prior art keywords
- data
- files
- blocks
- file
- stored
- 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
- 238000003860 storage Methods 0.000 title claims abstract description 258
- 238000000034 method Methods 0.000 title claims abstract description 74
- 238000013500 data storage Methods 0.000 claims description 33
- 239000003550 marker Substances 0.000 claims description 15
- 238000013507 mapping Methods 0.000 claims description 6
- 230000002155 anti-virotic effect Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000004080 punching Methods 0.000 description 4
- 241001269238 Data Species 0.000 description 3
- 230000014759 maintenance of location Effects 0.000 description 3
- 238000012795 verification Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 241001101988 Proxys Species 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000001035 drying Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 238000012706 support-vector machine Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- 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
Abstract
本发明公开了一种数据存储方法及装置,其中,数据存储方法包括:获取与待存储数据的原数据键相对应的加密数据;截取加密数据中位于第一预设位置的第一子数据,确定第一存储文件的第一文件标识以及第二存储文件的第二文件标识;截取加密数据中位于第二预设位置的第二子数据,在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识;将加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中;得到包含第一文件标识和第二文件块的块标识的新数据键;根据新数据键和待存储数据,构建实例数据,将实例数据写入第一数据库中。该技术方案节省了存储空间,提高了数据处理效率。
Description
技术领域
本发明涉及互联网技术领域,具体涉及一种数据存储方法及装置。
背景技术
随着互联网技术的不断发展,数据存储技术也得到了快速发展,出现了许多基于键值(Key-Value)的存储方案,例如,Redis存储方案和LevelDB存储方案等。这些存储方案的基本原理都是使用哈希、跳表、红黑树等数据结构,实现快速查找。
在实际应用中,可能会出现具有较长的数据键的数据,然而利用现有的Key-Value存储方案,对这类数据的数据键进行插入、查找或索引处理时,都会造成很多的性能损耗。因此,现有的Key-Value存储方案中存在着数据处理效率较低的问题。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据存储方法及装置。
根据本发明的一个方面,提供了一种数据存储方法,该方法包括:
获取与待存储数据的原数据键相对应的加密数据;
截取加密数据中位于第一预设位置的第一子数据,确定第一存储文件的第一文件标识以及第二存储文件的第二文件标识;
截取加密数据中位于第二预设位置的第二子数据,在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识;
将加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中;
得到包含第一文件标识和第二文件块的块标识的新数据键;
根据新数据键和待存储数据,构建数据键值对形式的实例数据,将实例数据写入第一数据库中。
根据本发明的另一方面,提供了一种数据存储装置,该装置包括:
获取模块,适于获取与待存储数据的原数据键相对应的加密数据;
第一确定模块,适于截取加密数据中位于第一预设位置的第一子数据,确定第一存储文件的第一文件标识以及第二存储文件的第二文件标识;
第二确定模块,适于截取加密数据中位于第二预设位置的第二子数据,在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识;
存储模块,适于将加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中;
生成模块,适于得到包含第一文件标识和第二文件块的块标识的新数据键;
第一写入模块,适于根据新数据键和待存储数据,构建数据键值对形式的实例数据,将实例数据写入第一数据库中。
根据本发明提供的技术方案,获取与待存储数据的原数据键相对应的加密数据,接着截取加密数据中位于第一预设位置的第一子数据,确定第一存储文件的第一文件标识以及第二存储文件的第二文件标识,截取加密数据中位于第二预设位置的第二子数据,在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识,将加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中,然后得到包含第一文件标识和第二文件块的块标识的新数据键,根据新数据键和待存储数据,构建数据键值对形式的实例数据,将实例数据写入第一数据库中。利用本发明提供的技术方案,根据与待存储数据的原数据键相对应的加密数据,能够将待存储数据的原数据键转化为所占空间较小的新数据键,从而节省了存储空间,优化了存储方式,提高了数据处理效率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的数据存储方法的流程示意图;
图2示出了根据本发明另一个实施例的数据存储方法的流程示意图;
图3示出了根据本发明一个实施例的数据存储装置的结构框图;
图4示出了根据本发明另一个实施例的数据存储装置的结构框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
键值存储数据库,这是一种NoSQL(非关系型数据库)模型,其数据按照数据键值对的形式进行组织、索引和存储。KV存储非常适合不涉及过多数据关系业务关系的业务数据,同时能有效减少读写磁盘的次数,比SQL数据库存储拥有更好的读写性能。
目前在生产环境,使用较多的K-V存储有Memcached,Redis,LevelDB等。在通信方面,主要使用专有的二进制协议,这样做的好处是协议解析的的性能比较高,不足的地方在于通用性差,需要为不同的语言实现专门的客户端,开发成本高,同时二进制协议的可调试性差,导致定位问题困难;在架构设计方面,上述存储的分布式基本都需要客户端来实现,Redis从3.0之后开始支持集群,但从生产环境中的测试情况来看,单点故障导致集群不可用的情况依然存在,且Redis的定位是缓存,对于持久化的支持程度有限。
针对以上传统方法的不足,本发明的发明人提出了一种新的分布式数据存储系统架构,并基于此系统进一步提出了一种数据存储方法及装置。该分布式数据存储系统包括:客户端、Linux虚拟服务器集群、分布式组件和存储引擎,如下所介绍的数据存储方法具体为存储引擎中各个存储节点所采用的数据存储方案。
在分布式数据存储系统中,将分布式组件与存储引擎分离,存储引擎只负责数据存储,以及对外提供http接口,以供分布式组件根据所提供的http接口向对应的存储节点写入数据,其中,存储引擎包括多个存储节点,各个存储节点是相互独立的,存储节点彼此之间不会直接进行通信,从而降低了存储引擎的复杂度。
本系统中,分布式组件向存储引擎写入数据时,能够根据Key来进行负载均衡,将数据写入指定的存储节点。分布式组件作为客户端与存储引擎之间的反向代理,对客户端屏蔽负载均衡的细节,保证存储节点的http接口的透明性。当某一个存储节点宕机时,分布式组件会自动对数据写请求进行负载均衡,保证整个系统依然可用,从而解决KV存储的单点限制。
另外,分布式组件中的每个节点都是独立的,当某一节点宕机时,服务器集群会自动将数据写请求发送至分布式组件中的其他可用的节点,从而解决了单点限制。当需要提高系统的吞吐率时,也只需要简单地增加节点即可实现。
目前业界主流的存储对于replica的实现存在两种模式:
模式一:1Primary-1Replica Shard
模式二:1Primary-N Replica Shards
分布式组件选用了工程上更加可行的模式一。模式二由于一份数据具有更多的备份,因此具备更高的的可用性,但同时带来了更多的数据一致性问题和实现的复杂度。模式一在高可用性方面不如模式二,但在实现难度方面要小很多,且分布式组件自身的定位是分布式kv存储,而不是分布式数据库,因此相对而言,模式一更加适用。
在本发明中,分布式组件为反向代理服务器,具体可以是Nginx服务器,nginx是高吞吐高并发的http反向代理,由于分布式组件并不需要对存储节点上的数据进行合并(merge),因此为了提高系统的吞吐量和并发量,分布式组件的进程模型为1master-Nworker,其中master进程会对worker进程进行自动保活,这一点保证了分布式组件单个节点的高可用性和高吞吐性。由于各个进程是独立的,因此对于少部分用到共享数据的接口,需要利用共享内存来进行通信。
Nginx服务器现有的负载均衡策略将存储节点地址等细节完全对外屏蔽了,也就是说,对于开发者来说这些细节是透明的,因此,无法将数据写入指定的存储节点,从而限定了定制化的负载均衡的实现,本发明提供的数据存储方法及装置能够实现定制化的负载均衡,实现将数据写入指定的存储节点。
下面通过几个具体的实施例对本发明提出的存储引擎内部使用的数据存储方法进行详细描述。需要说明的是,本发明提供的数据存储方法不局限于上述系统框架,也可以在其它类似的系统框架中实现。
图1示出了根据本发明一个实施例的数据存储方法的流程示意图,如图1所示,如图1所示,该方法包括如下步骤:
步骤S100,获取与待存储数据的原数据键相对应的加密数据。
待存储数据具体为K-V存储数据,其包含数据键key和数据值value。存储引擎接收到待存储数据的写入请求后,首先获取待存储数据的原数据键相对应的加密数据,该加密数据为利用预设加密算法对待存储数据的原数据键进行处理得到的。具体地,与待存储数据的原数据键相对应的加密数据可为根据待存储数据的原数据键计算得到的MD5值。
其中,本发明提供的数据存储方案可以用于查杀恶意文件的系统和服务中,也可以用于检测和收集恶意网址的系统和服务中。具体地,在查杀恶意文件的系统和服务中,可利用本发明提供的数据存储方案对数据键值对形式的安全文件样本或灰文件样本进行存储,其中,灰文件样本为安全性未知的文件样本。例如,当对灰文件样本进行存储时,待存储灰文件样本即为本发明所述的待存储数据,待存储灰文件样本的原数据键相对应的加密数据可为根据待存储灰文件样本的原数据键计算得到的MD5值;当对安全文件样本进行存储时,待存储安全文件样本即为本发明所述的待存储数据,待存储安全文件样本的原数据键相对应的加密数据可为根据待存储安全文件样本的原数据键计算得到的MD5值。
步骤S101,截取加密数据中位于第一预设位置的第一子数据,确定第一存储文件的第一文件标识以及第二存储文件的第二文件标识。
步骤S102,截取加密数据中位于第二预设位置的第二子数据,在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识。
步骤S103,将加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中。
其中,第一存储文件包括多个第一文件块,第二存储文件包括多个第二文件块。本领域技术人员可根据实际需要设置第一预设位置、第二预设位置和第三预设位置,此处不做限定。
假设步骤S100获取得到的与待存储数据的原数据键相对应的加密数据为根据待存储数据的原数据键计算得到的MD5值,该MD5值包括128位数据,其中,第一预设位置可为前8位,位于前8位的第一子数据所对应的数值范围为0-255,用于确定第一存储文件的第一文件标识以及第二存储文件的第二文件标识;第二预设位置可为第9位至第28位,一共20位,位于第9位至第28位的第二子数据所对应的数值范围为0-1048575,用于确定在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识;第三预设位置为第25位至第128位,一共104位,将位于第25位至第128位的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中。
例如,位于前8位的第一子数据所对应的数值为215,位于第9位至第28位的第二子数据所对应的数值为5200,那么在步骤S101中,所确定的第一存储文件的第一文件标识为215,所确定的第二存储文件的第二文件标识也为215,所确定的第一存储文件的第一文件标识和所确定的第二存储文件的第二文件标识相对应;在步骤S102中,在第一文件标识为215的第一存储文件中确定第一文件块的块标识为5200;在步骤S103中,将位于第25位至第128位的第三子数据存储至第二文件标识为215的第二存储文件中的第二文件块中。
步骤S104,得到包含第一文件标识和第二文件块的块标识的新数据键。
其中,新数据键包括:第一文件标识和存储有第三子数据的第二文件块的块标识。利用该方法,能够将待存储数据的原数据键转化为所占空间较小的新数据键。
步骤S105,根据新数据键和待存储数据,构建数据键值对形式的实例数据,将实例数据写入第一数据库中。
具体地,可将新数据键作为数据键,将待存储数据的原数据键、原数据键对应的原数据值和原数据键的长度信息作为数据键对应的数据值,构建数据键值对形式的实例数据,即将新key作为数据键,将待存储数据的原key、原value和原key的长度信息作为数据键对应的数据值,构建数据键值对形式的实例数据。在构建了实例数据之后,将所构建的实例数据写入第一数据库中。由于新数据键所占空间小于待存储数据的原数据键所占空间,利用新数据键作为数据键,能够节省存储空间,便于进行插入、查找或索引处理,有助于提高数据处理效率。
根据本发明实施例提供的数据存储方法,获取与待存储数据的原数据键相对应的加密数据,接着截取加密数据中位于第一预设位置的第一子数据,确定第一存储文件的第一文件标识以及第二存储文件的第二文件标识,截取加密数据中位于第二预设位置的第二子数据,在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识,将加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中,然后得到包含第一文件标识和第二文件块的块标识的新数据键,根据新数据键和待存储数据,构建数据键值对形式的实例数据,将实例数据写入第一数据库中。利用本发明提供的技术方案,根据与待存储数据的原数据键相对应的加密数据,能够将待存储数据的原数据键转化为所占空间较小的新数据键,从而节省了存储空间,优化了存储方式,提高了数据处理效率。
图2示出了根据本发明另一个实施例的数据存储方法的流程示意图,如图2所示,如图2所示,该方法包括如下步骤:
步骤S200,预先创建第一存储文件、第二存储文件和第三存储文件,并在系统内存中预先创建分别与第一存储文件、第二存储文件和第三存储文件相映射的内存块。
其中,第一存储文件由第一文件块组成;第二存储文件由第二文件块组成;第三存储文件由第三文件块组成。
在一个具体的示例中,创建256(16进制FF)个第一存储文件,每个第一存储文件的大小为9437184字节,同时在系统内存中预先创建256个内存块,每个内存块大小为9437184字节,256个内存块与256个第一存储文件一一映射;其中,内存块和第一存储文件的映射可以通过系统接口实现,例如UNIX系统中的mmap接口。每个第一存储文件分为1048576(即220)个第一文件块,每个第一文件块的大小为9字节。
创建256个第二存储文件,每个第二存储文件的初始大小为6800000字节,同时在系统内存中预先创建256个内存块,每个内存块大小为6800000字节,256个内存块与256个第二存储文件一一映射;每个初始的第二存储文件分为400000个第二文件块,每个第二文件块的大小为17字节。对于一个第二存储文件,每当写满400000个第二文件块时,将扩充400000个第二文件块,即第二存储文件的大小增加6800000字节,再在系统内存中创建一个内存块与该第二存储文件一一映射。
创建256个第三存储文件,每个第三存储文件的初始大小为2880000字节,同时在系统内存中预先创建256个内存块,每个内存块大小为2880000字节,256个内存块与256个第三存储文件一一映射;每个初始的第三存储文件分为80000个第三文件块,每个第三文件块的大小为36字节。对于一个第三存储文件,每当写满80000个第三文件块时,将扩充80000个第三文件块,即第三存储文件的大小增加2880000字节,再在系统内存中创建一个内存块与该第三存储文件一一映射。
由于第一存储文件、第二存储文件和第三存储文件都具有与其相映射的内存块,那么读写文件操作就可通过读写内存完成,将较慢的磁盘读写转化为极快的内存读写,从而有效地提高了读写性能。
步骤S201,获取与待存储数据的原数据键相对应的加密数据。
具体地,与待存储数据的原数据键相对应的加密数据可为根据待存储数据的原数据键计算得到的MD5值。
步骤S202,截取加密数据中位于第一预设位置的第一子数据,确定第一存储文件的第一文件标识以及第二存储文件的第二文件标识。
步骤S203,截取加密数据中位于第二预设位置的第二子数据,在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识。
其中,第二子数据对应的数据范围小于或等于第一文件块的总数量,从而能够根据第二子数据确定第一文件块的块标识。
步骤S204,将加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中。
假设步骤S201获取得到的与待存储数据的原数据键相对应的加密数据为根据待存储数据的原数据键计算得到的MD5值,该MD5值包括128位数据,其中,第一预设位置为前8位,MD5值中位于前8位的第一子数据所对应的数值范围为0-255,用于确定第一存储文件的第一文件标识以及第二存储文件的第二文件标识;第二预设位置为第9位至第28位,一共20位,MD5值中位于第9位至第28位的第二子数据所对应的数值范围为0-1048575,用于在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识;第三预设位置为第25位至第128位,一共104位,将MD5值中位于第25位至第128位的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中。其中,将MD5值中位于第25位至第128位的第三子数据顺序插入到所确定的第二文件标识对应的第二存储文件中的第二文件块中。
由于MD5值中位于前8位的第一子数据所对应的数值范围为0-255,而预先创建了256个第一存储文件和第二存储文件,因此,能够根据MD5值中位于前8位的第一子数据所对应的数值确定第一存储文件的第一文件标识以及第二存储文件的第二文件标识。又由于MD5值中位于第9位至第28位的第二子数据所对应的数值范围为0-1048575,而每个第一存储文件分为1048576个第一文件块,第二子数据对应的数据范围等于第一文件块的总数量,因此,能够根据MD5值中位于第9位至第28位的第二子数据所对应的数值,在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识。
具体地,在步骤S204中,通过系统接口,以内存映射方式,将加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中,从而将较慢的磁盘读写转化为极快的内存读写,有效地提高了读写性能。
可选地,该方法还可包括:根据待存储数据的原数据键,计算长度取余结果;将计算得到的长度取余结果存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中;根据待存储数据的原数据键,确定冗余校验码;将所确定的冗余校验码存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中的步骤。
其中,将待存储数据的原数据键的长度mod 0xFF,计算得到长度取余结果,另外,可利用预设算法,根据待存储数据的原数据键,确定冗余校验码。第二文件块的大小为17字节,在每个第二文件块中:(1)使用13字节的空间存储待存储数据的原数据键对应的MD5值中位于第25位至第128位的第三子数据;(2)为了防止加密数据存在冲突,使用2字节的空间存储长度取余结果;(3)使用2字节的空间存储冗余校验码,以供校验时使用。
步骤S205,得到包含第一文件标识和第二文件块的块标识的新数据键。
利用该方法,能够将待存储数据的原数据键转化为所占空间较小的新数据键。
可选地,新数据键除了包括第一文件标识和存储有第三子数据的第二文件块的块标识,还可包括版本信息,利用版本信息能够在并发请求读写数据时有效地保证数据的一致性。
步骤S206,根据新数据键和待存储数据,构建数据键值对形式的实例数据,将实例数据写入第一数据库中。
具体地,在步骤S206中,可将新数据键作为数据键,将待存储数据的原数据键、原数据键对应的原数据值和原数据键的长度信息作为数据键对应的数据值,构建数据键值对形式的实例数据,即将新key作为数据键,将待存储数据的原key、原value和原key的长度信息作为数据键对应的数据值,构建数据键值对形式的实例数据。在构建了实例数据之后,将所构建的实例数据写入第一数据库中。由于新数据键所占空间小于待存储数据的原数据键所占空间,利用新数据键作为数据键,能够节省存储空间,便于进行插入、查找或索引处理,有助于提高数据处理效率。
步骤S207,根据第一子数据和第二子数据,判断待存储数据的原数据键相对应的加密数据是否存在冲突;若是,则执行步骤S209;若否,则执行步骤S208。
在步骤S207中,根据第一子数据和第二子数据,对待存储数据的原数据键相对应的加密数据是否存在冲突进行判断。如果判断得到待存储数据的原数据键相对应的加密数据存在冲突,则执行步骤S209;如果判断得到待存储数据的原数据键相对应的加密数据不存在冲突,则执行步骤S208。
当步骤S201获取得到的与待存储数据的原数据键相对应的加密数据为根据待存储数据的原数据键计算得到的MD5值,在本发明中,预先创建了256个第一存储文件,每个第一存储文件分为1048576个第一文件块,那么利用第一存储文件仅能精确到待存储数据的原数据键对应的MD5值中的第28位,仅能存储228(即268435456)个不同的数据。当存在海量的待存储数据时,很有可能会出现待存储数据的原数据键相对应的MD5值中的前28位的数据相同的情况,将这种情况称为冲突,那么在步骤S207中,可根据MD5值中的前28位的数据,判断待存储数据的原数据键相对应的MD5值是否存在冲突。
步骤S208,将新数据键写入所确定的第一文件块的块标识对应的第一文件块中。
在经步骤S207判断得到待存储数据的原数据键相对应的加密数据不存在冲突的情况下,则将新数据键写入所确定的第一文件块的块标识对应的第一文件块中。
步骤S209,判断存在冲突的待存储数据的数据条数是否超过预设数量;若是,则执行步骤S210;若否,则执行步骤S211。
在经步骤S207判断得到待存储数据的原数据键相对应的加密数据存在冲突的情况下,在步骤S209中,还需判断存在冲突的待存储数据的数据条数是否超过预设数量。其中,预设数量是根据新数据键和第三文件块的大小计算得到的,具体为第三文件块所能容纳新数据键的数量。
步骤S210,将存在冲突的待存储数据的原数据键相对应的加密数据作为数据键,将存在冲突的待存储数据的原数据键相对应新数据键作为数据键对应的数据值,构建数据键值对形式的实例数据,将实例数据写入第二数据库中。
例如,存在冲突的待存储数据的原key相对应的加密数据为MD5值,则将该MD5值作为数据键,将存在冲突的待存储数据的新key作为数据键对应的数据值,构建数据键值对形式的实例数据。在构建了实例数据之后,将所构建的实例数据写入第二数据库中。由于MD5值所占空间小于待存储数据的原数据键所占空间,利用MD5值作为数据键,能够节省存储空间,便于进行插入、查找或索引处理,有助于提高数据处理效率。
可选地,在判断得到存在冲突的待存储数据的数据条数超过预设数量的情况下,还可将冲突标记位写入所确定的第一文件块的块标识对应的第一文件块中。
步骤S211,根据第一子数据,确定第三存储文件的第三文件标识。
在经步骤S209判断得到存在冲突的待存储数据的数据条数未超过预设数量时,在步骤S211中,根据第一子数据,确定第三存储文件的第三文件标识。由于MD5值中位于前8位的第一子数据所对应的数值范围为0-255,而预先创建了256个第三存储文件,因此,能够根据MD5值中位于前8位的第一子数据所对应的数值确定第三存储文件的第三文件标识。
步骤S212,将新数据键写入所确定的第三文件标识对应的的第三存储文件中的第三文件块中。
由于待存储数据的原数据键相对应的加密数据存在冲突,为了便于识别,存在冲突的待存储数据的原数据键相对应新数据键还包括冲突标记位。根据冲突标记位可知该原数据键相对应的加密数据存在冲突。
另外,为了能够在并发请求读写数据时有效地保证数据的一致性,新数据键还包括版本信息,那么新数据键共包括第一文件标识和存储有第三子数据的第二文件块的块标识、版本信息以及冲突标记位。在本发明实施例中,新数据键的大小为9字节,其中,使用1字节的空间存储第一文件标识,使用4字节的空间存储第二文件块的块标识,使用3.5字节的空间存储版本信息,使用0.5字节的空间存储冲突标记位。
在本发明中,利用同一个第三文件块存储一组存在冲突的待存储数据的新数据键。例如,待存储数据1、待存储数据2和待存储数据3存在冲突,待存储数据4、待存储数据5和待存储数据6存在冲突,则可称待存储数据1、待存储数据2和待存储数据3为一组存在冲突的待存储数据,待存储数据4、待存储数据5和待存储数据6为另一组存在冲突的待存储数据,那么将待存储数据1的新数据键、待存储数据2的新数据键和待存储数据3的新数据键写入至同一个第三文件块,将待存储数据4的新数据键、待存储数据5的新数据键和待存储数据6的新数据键写入至另一个第三文件块。
由于每个第三文件块的大小有限,每个第三文件块中只能够被写入预设数量的新数据键,例如,在本发明实施例中,每个第三文件块的大小为36字节,新数据键的大小为9字节,那么第三文件块中只能够被写入4个新数据键,此时,预设数量即为4,那么当存在冲突的待存储数据的数据条数超过4个时,将无法利用同一个第三文件块存储该组中所有的存在冲突的待存储数据的新数据键。
因此,在经步骤S207判断得到待存储数据的原数据键相对应的加密数据存在冲突的情况下,还需步骤S209对存在冲突的待存储数据的数据条数是否超过预设数量进行判断,如果判断得到存在冲突的待存储数据的数据条数超过预设数量,则执行步骤S210。
步骤S213,将第一文件标识和第三文件块的块标识写入所确定的第一文件块的块标识对应的第一文件块中。
在将存在冲突的待存储数据的新数据键写入所确定的第三文件标识对应的的第三存储文件中的第三文件块中之后,在步骤S213中,将第一文件标识和第三文件块的块标识写入所确定的第一文件块的块标识对应的第一文件块中。
可选地,在步骤S213中,还可将冲突标记位写入所确定的第一文件块的块标识对应的第一文件块中。
根据本发明实施例提供的数据存储方法,查询某条待查询数据的具体过程如下:
(1)根据该条待查询数据的原key,计算得到对应的MD5值,其中,该MD5值包括128位数据。
(2)利用MD5值中位于前8位的数据所对应的数值确定第一存储文件的第一文件标识、第二存储文件的第二文件标识和第三存储文件的第三文件标识,其中,第一文件标识、第二文件标识和第三文件标识相对应,范围为0-255;所确定的第三文件标识在MD5值中的前28位的数据存在冲突时使用。
(3)利用MD5值中位于第9位至第28位的数据所对应的数值在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识,第一文件块的块标识范围为0-1048575。
(4)查询所确定的第一文件块的块标识对应的第一文件块中是否存储有新key。
(5)如果所确定的第一文件块的块标识对应的第一文件块中存储有新key,说明该条待查询数据的原key对应的MD5值不存在冲突,则从新key中获取第二文件块的块标识,接着查找第二文件块的块标识对应的第二文件块,从该第二文件块中获取存储的MD5值中位于第25位至第108位的数据、长度取余结果和冗余校验码,判断从该第二文件块中所获取的MD5值中位于第25位至第108位的数据是否与步骤(1)中计算得到的MD5值中位于第25位至第108位的数据相同,并根据待查询数据的原key计算对应的长度取余结果和冗余校验码,将计算得到的长度取余结果和冗余校验码分别与从该第二文件块中所获取的长度取余结果和冗余校验码进行比较,校验数据最终一致性。如果校验成功,则从第一数据库中查找以新key为数据键的实例数据,从查找到的实例数据中获取存储数据的原value。该原value即为该待查询数据的原key对应的数据值。
(6)如果所确定的第一文件块的块标识对应的第一文件块中存储有第一文件标识、第三文件块的块标识和冲突标记位,说明该条待查询数据的原key对应的MD5值存在冲突,且存在冲突的存储数据的数据条数未超过预设数量,则查找第三文件块的块标识对应的第三文件块,从该第三文件块中逐个获取新key,接着针对每一个新key,从新key中获取第二文件块的块标识,查找第二文件块的块标识对应的第二文件块,利用该第二文件块中存储的MD5值中位于第25位至第108位的数据、长度取余结果和冗余校验码进行校验。如果经校验发现根据该第三文件块中的某个新key能够校验成功,则从第一数据库中查找以该新key为数据键的实例数据,从查找的实例数据中获取存储数据的原value。该原value即为该待查询数据的原key对应的数据值。
(7)如果所确定的第一文件块的块标识对应的第一文件块中未存储有数据或者仅存储有冲突标记位,说明该条待查询数据的原key对应的MD5值可能存在冲突,且存在冲突的存储数据的数据条数超过预设数量,则从第二数据库中查找以该MD5值为数据键的实例数据,那么根据该实例数据得到对应的新key,接着从查找到的实例数据中获取存储数据的新key,然后从新key中获取第二文件块的块标识,查找第二文件块的块标识对应的第二文件块,利用该第二文件块中存储的MD5值中位于第25位至第108位的数据、长度取余结果和冗余校验码进行校验。如果校验成功,则从第一数据库中查找以该新key为数据键的实例数据,从查找到的实例数据中获取存储数据的原value。该原value即为该待查询数据的原key对应的数据值。
另外,基于本发明实施例提供的数据存储方法,对于一些存储服务,无需访问数据库就可进行。例如,当需要查询某条数据是否已存储时,可根据该条数据的原数据键计算相对应的加密数据,按照获取新数据键的步骤,如果能够查找到对应的新数据键,则说明该条数据已存储;如果无法查找到对应的新数据键,则说明该条数据未存储。
根据本发明实施例提供的数据存储方法,在系统内存中预先创建了分别与第一存储文件、第二存储文件和第三存储文件相映射的内存块,因此可将读写文件操作通过读写内存完成,将较慢的磁盘读写转化为极快的内存读写,从而有效地提高了读写性能;根据与待存储数据的原数据键相对应的加密数据,能够将待存储数据的原数据键转化为所占空间较小的新数据键,节省了存储空间,优化了存储方式;并且将进行插入、查找、索引处理的处理对象由原数据键转变为新数据键,有效地缩减了耗时,提高了数据处理效率。
本发明提供的数据存储方案还可以用于查杀恶意文件的系统和服务中,例如,利用云端查杀恶意文件的服务中,也可以用于检测和收集恶意网址的系统和服务中。
例如,查杀恶意文件的系统包括:样本存储装置、查杀引擎、扫描调度装置和包含多个鉴定器的样本扫描装置。该系统可以是系统中各个装置位于同一个物理设备中,也可以是系统中各个装置位于不同的物理设备中。
其中,样本存储装置,适于存储文件样本。具体地,该样本存储装置利用本发明提供的数据存储方案对数据键值对形式的灰文件样本进行存储。
扫描调度装置,适于对于文件样本中的灰文件样本,根据预设的策略从样本存储装置存储的灰文件样本中选取待扫描的灰文件样本,并根据各个鉴定器的更新记录和/或鉴定器的扫描记录选取用于扫描灰文件样本的鉴定器。其中,鉴定器可以为用于检测文件样本安全性的杀毒应用,例如bitdefender(比特梵德,来自罗马尼亚的一种杀毒应用),以及QVM(奇虎支持向量机)提供的杀毒应用,以及云杀毒引擎等。
图3示出了根据本发明一个实施例的数据存储装置的结构框图,如图3所示,该装置包括:获取模块301、第一确定模块302、第二确定模块303、存储模块304、生成模块305和第一写入模块306。
获取模块301适于:获取与待存储数据的原数据键相对应的加密数据。
其中,与待存储数据的原数据键相对应的加密数据可为根据待存储数据的原数据键计算得到的MD5值。
第一确定模块302适于:截取加密数据中位于第一预设位置的第一子数据,确定第一存储文件的第一文件标识以及第二存储文件的第二文件标识。
第二确定模块303适于:截取加密数据中位于第二预设位置的第二子数据,在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识。
本领域技术人员可根据实际需要设置第一预设位置和第二预设位置,此处不做限定。
存储模块304适于:将加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中。
生成模块305适于:得到包含第一文件标识和第二文件块的块标识的新数据键。
其中,新数据键包括:第一文件标识和存储有第三子数据的第二文件块的块标识。利用该装置,能够将待存储数据的原数据键转化为所占空间较小的新数据键。
第一写入模块306适于:根据新数据键和待存储数据,构建数据键值对形式的实例数据,将实例数据写入第一数据库中。
根据本发明实施例提供的数据存储装置,获取模块获取与待存储数据的原数据键相对应的加密数据,第一确定模块截取加密数据中位于第一预设位置的第一子数据,确定第一存储文件的第一文件标识以及第二存储文件的第二文件标识,第二确定模块截取加密数据中位于第二预设位置的第二子数据,在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识,存储模块将加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中,生成模块得到包含第一文件标识和第二文件块的块标识的新数据键,第一写入模块根据新数据键和待存储数据,构建数据键值对形式的实例数据,将实例数据写入第一数据库中。利用本发明提供的技术方案,根据与待存储数据的原数据键相对应的加密数据,能够将待存储数据的原数据键转化为所占空间较小的新数据键,从而节省了存储空间,优化了存储方式,提高了数据处理效率。
图4示出了根据本发明另一个实施例的数据存储装置的结构框图,如图4所示,该装置包括:创建模块401、获取模块402、第一确定模块403、第二确定模块404、存储模块405、生成模块406、第一写入模块407、第一判断模块408、第二写入模块409和第三写入模块410。
创建模块401适于:预先创建第一存储文件、第二存储文件和第三存储文件,并在系统内存中预先创建分别与第一存储文件、第二存储文件和第三存储文件相映射的内存块。
第一存储文件由第一文件块组成;第二存储文件由第二文件块组成;第三存储文件由第三文件块组成。具体地,可通过系统接口,在系统内存中预先创建分别与第一存储文件、第二存储文件和第三存储文件相映射的内存块。由于第一存储文件、第二存储文件和第三存储文件都具有与其相映射的内存块,那么读写文件操作就可通过读写内存完成,将较慢的磁盘读写转化为极快的内存读写,从而有效地提高了读写性能。
获取模块402适于:获取与待存储数据的原数据键相对应的加密数据。
其中,获取模块402所获取的与待存储数据的原数据键相对应的加密数据可为根据待存储数据的原数据键计算得到的MD5值。
第一确定模块403适于:截取加密数据中位于第一预设位置的第一子数据,确定第一存储文件的第一文件标识以及第二存储文件的第二文件标识。
第二确定模块404适于:截取加密数据中位于第二预设位置的第二子数据,在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识。
其中,第二子数据对应的数值范围小于或等于第一文件块的总数量。
存储模块405适于:将加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中。
其中,存储模块进一步适于:通过系统接口,以内存映射方式,将加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中。
生成模块406适于:得到包含第一文件标识和第二文件块的块标识的新数据键。
可选地,新数据键除了包括第一文件标识和存储有第三子数据的第二文件块的块标识,还可包括版本信息,利用版本信息能够在并发请求读写数据时有效地保证数据的一致性。
第一写入模块407适于:根据新数据键和待存储数据,构建数据键值对形式的实例数据,将实例数据写入第一数据库中。
第一判断模块408适于:根据第一子数据和第二子数据,判断待存储数据的原数据键相对应的加密数据是否存在冲突。
第二写入模块409适于:若第一判断模块408判断得到待存储数据的原数据键相对应的加密数据不存在冲突,则将新数据键写入所确定的第一文件块的块标识对应的第一文件块中。
第一确定模块403进一步适于:若第一判断模块408判断得到待存储数据的原数据键相对应的加密数据存在冲突,则根据第一子数据,确定第三存储文件的第三文件标识。
第三写入模块410适于:若第一判断模块408判断得到待存储数据的原数据键相对应的加密数据存在冲突,则将新数据键写入所确定的第三文件标识对应的的第三存储文件中的第三文件块中;将第一文件标识和第三文件块的块标识写入所确定的第一文件块的块标识对应的第一文件块中。
由于待存储数据的原数据键相对应的加密数据存在冲突,为了便于识别,存在冲突的待存储数据的原数据键相对应新数据键还包括冲突标记位。根据冲突标记位可知该原数据键相对应的加密数据是否存在冲突。
另外,为了能够在并发请求读写数据时有效地保证数据的一致性,新数据键还包括版本信息,那么新数据键共包括第一文件标识和存储有第三子数据的第二文件块的块标识、版本信息以及冲突标记位。
在本发明中,利用同一个第三文件块存储一组存在冲突的待存储数据的新数据键。由于每个第三文件块的大小有限,每个第三文件块中只能够被写入预设数量的新数据键,因此,该装置还包括:第二判断模块411和第四写入模块412。
第二判断模块411适于:若第一判断模块408判断得到待存储数据的原数据键相对应的加密数据存在冲突,则判断存在冲突的待存储数据的数据条数是否超过预设数量。
如果第二判断模块411判断得到存在冲突的待存储数据的数据条数超过预设数量,则触发第四写入模块412;如果第二判断模块411判断得到存在冲突的待存储数据的数据条数未超过预设数量,则触发第三写入模块410。
第四写入模块412适于:若第二判断模块411判断得到存在冲突的待存储数据的数据条数超过预设数量,则将存在冲突的待存储数据的原数据键相对应的加密数据作为数据键,将存在冲突的待存储数据的原数据键相对应新数据键作为数据键对应的数据值,构建数据键值对形式的实例数据,将实例数据写入第二数据库中。
可选地,第四写入模块412进一步适于:若第二判断模块411判断得到存在冲突的待存储数据的数据条数超过预设数量,则将冲突标记位写入所确定的第一文件块的块标识对应的第一文件块中。
其中,创建模块401与第一确定模块403、第二确定模块404、存储模块405、第二写入模块409、第三写入模块410以及第四写入模块412均有连接关系,为了便于查看,图中并未示出全部的连接关系。
该装置还可包括:计算模块413和第三确定模块414。
计算模块413适于:根据待存储数据的原数据键,计算长度取余结果。
具体地,计算模块413将待存储数据的原数据键的长度mod 0xFF,计算得到长度取余结果。
第三确定模块414适于:根据待存储数据的原数据键,确定冗余校验码。
具体地,第三确定模块414利用预设算法,根据待存储数据的数据键,确定冗余校验码。
存储模块405进一步适于:将计算模块413计算得到的长度取余结果和第三确定模块414所确定的冗余校验码存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中。
根据本发明实施例提供的数据存储装置,在系统内存中预先创建了分别与第一存储文件、第二存储文件和第三存储文件相映射的内存块,因此可将读写文件操作通过读写内存完成,将较慢的磁盘读写转化为极快的内存读写,从而有效地提高了读写性能;根据与待存储数据的原数据键相对应的加密数据,能够将待存储数据的原数据键转化为所占空间较小的新数据键,节省了存储空间,优化了存储方式;并且将进行插入、查找、索引处理的处理对象由原数据键转变为新数据键,有效地缩减了耗时,提高了数据处理效率。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了:A1、一种数据存储方法,包括:
获取与待存储数据的原数据键相对应的加密数据;
截取所述加密数据中位于第一预设位置的第一子数据,确定第一存储文件的第一文件标识以及第二存储文件的第二文件标识;
截取所述加密数据中位于第二预设位置的第二子数据,在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识;
将所述加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中;
得到包含所述第一文件标识和所述第二文件块的块标识的新数据键;
根据所述新数据键和所述待存储数据,构建数据键值对形式的实例数据,将所述实例数据写入第一数据库中。
A2、根据A1所述的方法,所述方法还包括:
根据所述第一子数据和所述第二子数据,判断所述待存储数据的原数据键相对应的加密数据是否存在冲突;
若判断得到所述待存储数据的原数据键相对应的加密数据不存在冲突,则将所述新数据键写入所确定的第一文件块的块标识对应的第一文件块中。
A3、根据A2所述的方法,所述方法还包括:
若判断得到所述待存储数据的原数据键相对应的加密数据存在冲突,则根据所述第一子数据,确定第三存储文件的第三文件标识;
将所述新数据键写入所确定的第三文件标识对应的的第三存储文件中的第三文件块中;
将所述第一文件标识和所述第三文件块的块标识写入所确定的第一文件块的块标识对应的第一文件块中。
A4、根据A3所述的方法,所述新数据键还包括:冲突标记位。
A5、根据A1所述的方法,在所述获取与待存储数据的原数据键相对应的加密数据之前,所述方法还包括:
预先创建第一存储文件、第二存储文件和第三存储文件,并在系统内存中预先创建分别与第一存储文件、第二存储文件和第三存储文件相映射的内存块;
其中,所述第一存储文件由第一文件块组成,所述第二子数据对应的数值范围小于或等于所述第一文件块的总数量;所述第二存储文件由第二文件块组成;所述第三存储文件由第三文件块组成。
A6、根据A1所述的方法,所述将所述加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中进一步包括:
通过系统接口,以内存映射方式,将所述加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中。
A7、根据A2所述的方法,所述方法还包括:
若判断得到所述待存储数据的原数据键相对应的加密数据存在冲突,则判断存在冲突的待存储数据的数据条数是否超过预设数量;
若是,则将存在冲突的待存储数据的原数据键相对应的加密数据作为数据键,将存在冲突的待存储数据的原数据键相对应新数据键作为数据键对应的数据值,构建数据键值对形式的实例数据,将所述实例数据写入第二数据库中。
A8、根据A1-A7任一项所述的方法,所述方法还包括:
根据待存储数据的原数据键,计算长度取余结果;
将计算得到的长度取余结果存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中。
A9、根据A1-A7任一项所述的方法,所述方法还包括:
根据待存储数据的原数据键,确定冗余校验码;
将所确定的冗余校验码存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中。
本发明还公开了:B10、一种数据存储装置,包括:
获取模块,适于获取与待存储数据的原数据键相对应的加密数据;
第一确定模块,适于截取所述加密数据中位于第一预设位置的第一子数据,确定第一存储文件的第一文件标识以及第二存储文件的第二文件标识;
第二确定模块,适于截取所述加密数据中位于第二预设位置的第二子数据,在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识;
存储模块,适于将所述加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中;
生成模块,适于得到包含所述第一文件标识和所述第二文件块的块标识的新数据键;
第一写入模块,适于根据所述新数据键和所述待存储数据,构建数据键值对形式的实例数据,将所述实例数据写入第一数据库中。
B11、根据B10所述的装置,所述装置还包括:
第一判断模块,适于根据所述第一子数据和所述第二子数据,判断所述待存储数据的原数据键相对应的加密数据是否存在冲突;
第二写入模块,适于若所述第一判断模块判断得到所述待存储数据的原数据键相对应的加密数据不存在冲突,则将所述新数据键写入所确定的第一文件块的块标识对应的第一文件块中。
B12、根据B11所述的装置,所述第一确定模块进一步适于:若所述第一判断模块判断得到所述待存储数据的原数据键相对应的加密数据存在冲突,则根据所述第一子数据,确定第三存储文件的第三文件标识;
所述装置还包括:
第三写入模块,适于若所述第一判断模块判断得到所述待存储数据的原数据键相对应的加密数据存在冲突,则将所述新数据键写入所确定的第三文件标识对应的的第三存储文件中的第三文件块中;将所述第一文件标识和所述第三文件块的块标识写入所确定的第一文件块的块标识对应的第一文件块中。
B13、根据B12所述的装置,所述新数据键还包括:冲突标记位。
B14、根据B10所述的装置,所述装置还包括:
创建模块,适于预先创建第一存储文件、第二存储文件和第三存储文件,并在系统内存中预先创建分别与第一存储文件、第二存储文件和第三存储文件相映射的内存块;
其中,所述第一存储文件由第一文件块组成,所述第二子数据对应的数值范围小于或等于所述第一文件块的总数量;所述第二存储文件由第二文件块组成;所述第三存储文件由第三文件块组成。
B15、根据B10所述的装置,所述存储模块进一步适于:
通过系统接口,以内存映射方式,将所述加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中。
B16、根据B11所述的装置,所述装置还包括:
第二判断模块,适于若所述第一判断模块判断得到所述待存储数据的原数据键相对应的加密数据存在冲突,则判断存在冲突的待存储数据的数据条数是否超过预设数量;
第四写入模块,适于若所述第二判断模块判断得到存在冲突的待存储数据的数据条数超过预设数量,则将存在冲突的待存储数据的原数据键相对应的加密数据作为数据键,将存在冲突的待存储数据的原数据键相对应新数据键作为数据键对应的数据值,构建数据键值对形式的实例数据,将所述实例数据写入第二数据库中。
B17、根据B10-B16任一项所述的装置,所述装置还包括:计算模块,适于根据待存储数据的原数据键,计算长度取余结果;
所述存储模块进一步适于:将所述计算模块计算得到的长度取余结果存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中。
B18、根据B10-B16任一项所述的装置,所述装置还包括:第三确定模块,适于根据待存储数据的原数据键,确定冗余校验码;
所述存储模块进一步适于:将所述第三确定模块所确定的冗余校验码存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中。
Claims (10)
1.一种数据存储方法,包括:
获取与待存储数据的原数据键相对应的加密数据;
截取所述加密数据中位于第一预设位置的第一子数据,确定第一存储文件的第一文件标识以及第二存储文件的第二文件标识;
截取所述加密数据中位于第二预设位置的第二子数据,在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识;
将所述加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中;
得到包含所述第一文件标识和所述第二文件块的块标识的新数据键;
根据所述新数据键和所述待存储数据,构建数据键值对形式的实例数据,将所述实例数据写入第一数据库中。
2.根据权利要求1所述的方法,所述方法还包括:
根据所述第一子数据和所述第二子数据,判断所述待存储数据的原数据键相对应的加密数据是否存在冲突;
若判断得到所述待存储数据的原数据键相对应的加密数据不存在冲突,则将所述新数据键写入所确定的第一文件块的块标识对应的第一文件块中。
3.根据权利要求2所述的方法,所述方法还包括:
若判断得到所述待存储数据的原数据键相对应的加密数据存在冲突,则根据所述第一子数据,确定第三存储文件的第三文件标识;
将所述新数据键写入所确定的第三文件标识对应的的第三存储文件中的第三文件块中;
将所述第一文件标识和所述第三文件块的块标识写入所确定的第一文件块的块标识对应的第一文件块中。
4.根据权利要求3所述的方法,所述新数据键还包括:冲突标记位。
5.根据权利要求1所述的方法,在所述获取与待存储数据的原数据键相对应的加密数据之前,所述方法还包括:
预先创建第一存储文件、第二存储文件和第三存储文件,并在系统内存中预先创建分别与第一存储文件、第二存储文件和第三存储文件相映射的内存块;
其中,所述第一存储文件由第一文件块组成,所述第二子数据对应的数值范围小于或等于所述第一文件块的总数量;所述第二存储文件由第二文件块组成;所述第三存储文件由第三文件块组成。
6.根据权利要求1所述的方法,所述将所述加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中进一步包括:
通过系统接口,以内存映射方式,将所述加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中。
7.根据权利要求2所述的方法,所述方法还包括:
若判断得到所述待存储数据的原数据键相对应的加密数据存在冲突,则判断存在冲突的待存储数据的数据条数是否超过预设数量;
若是,则将存在冲突的待存储数据的原数据键相对应的加密数据作为数据键,将存在冲突的待存储数据的原数据键相对应新数据键作为数据键对应的数据值,构建数据键值对形式的实例数据,将所述实例数据写入第二数据库中。
8.根据权利要求1-7任一项所述的方法,所述方法还包括:
根据待存储数据的原数据键,计算长度取余结果;
将计算得到的长度取余结果存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中。
9.根据权利要求1-7任一项所述的方法,所述方法还包括:
根据待存储数据的原数据键,确定冗余校验码;
将所确定的冗余校验码存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中。
10.一种数据存储装置,包括:
获取模块,适于获取与待存储数据的原数据键相对应的加密数据;
第一确定模块,适于截取所述加密数据中位于第一预设位置的第一子数据,确定第一存储文件的第一文件标识以及第二存储文件的第二文件标识;
第二确定模块,适于截取所述加密数据中位于第二预设位置的第二子数据,在所确定的第一文件标识对应的第一存储文件中确定第一文件块的块标识;
存储模块,适于将所述加密数据中位于第三预设位置的第三子数据存储至所确定的第二文件标识对应的第二存储文件中的第二文件块中;
生成模块,适于得到包含所述第一文件标识和所述第二文件块的块标识的新数据键;
第一写入模块,适于根据所述新数据键和所述待存储数据,构建数据键值对形式的实例数据,将所述实例数据写入第一数据库中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710054679.6A CN106844676B (zh) | 2017-01-24 | 2017-01-24 | 数据存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710054679.6A CN106844676B (zh) | 2017-01-24 | 2017-01-24 | 数据存储方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106844676A true CN106844676A (zh) | 2017-06-13 |
CN106844676B CN106844676B (zh) | 2020-07-07 |
Family
ID=59120730
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710054679.6A Expired - Fee Related CN106844676B (zh) | 2017-01-24 | 2017-01-24 | 数据存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106844676B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107451461A (zh) * | 2017-06-28 | 2017-12-08 | 江苏通付盾信息安全技术有限公司 | 移动设备的设备指纹处理方法、装置、服务器及存储介质 |
CN107727082A (zh) * | 2017-11-09 | 2018-02-23 | 国家海洋局第二海洋研究所 | 一种实时监测浮标的模块化系统 |
CN108170768A (zh) * | 2017-12-25 | 2018-06-15 | 腾讯科技(深圳)有限公司 | 数据库同步方法、装置及可读介质 |
WO2020019749A1 (zh) * | 2018-07-24 | 2020-01-30 | 华为技术有限公司 | 一种数据分片方法、相关设备及计算机存储介质 |
CN110928483A (zh) * | 2018-09-19 | 2020-03-27 | 华为技术有限公司 | 数据存储、数据获取方法及设备 |
CN111241005A (zh) * | 2020-01-09 | 2020-06-05 | 杭州涂鸦信息技术有限公司 | 一种基于键值对的安全分区存储方法及系统 |
CN114553581A (zh) * | 2022-03-01 | 2022-05-27 | 珠海金山数字网络科技有限公司 | 一种数据处理方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102024057A (zh) * | 2010-12-24 | 2011-04-20 | 中兴通讯股份有限公司 | 海量数据记录的索引建立方法及装置 |
CN102375852A (zh) * | 2010-08-24 | 2012-03-14 | 中国移动通信集团公司 | 建立数据索引的方法、利用该索引查询数据的方法和系统 |
CN103136243A (zh) * | 2011-11-29 | 2013-06-05 | 中国电信股份有限公司 | 基于云存储的文件系统去重方法及装置 |
CN103218455A (zh) * | 2013-05-07 | 2013-07-24 | 中国人民解放军国防科学技术大学 | Key-Value数据库用户请求的高速并发处理方法 |
CN103518364A (zh) * | 2013-03-19 | 2014-01-15 | 华为技术有限公司 | 分布式存储系统的数据更新方法及服务器 |
-
2017
- 2017-01-24 CN CN201710054679.6A patent/CN106844676B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102375852A (zh) * | 2010-08-24 | 2012-03-14 | 中国移动通信集团公司 | 建立数据索引的方法、利用该索引查询数据的方法和系统 |
CN102024057A (zh) * | 2010-12-24 | 2011-04-20 | 中兴通讯股份有限公司 | 海量数据记录的索引建立方法及装置 |
CN103136243A (zh) * | 2011-11-29 | 2013-06-05 | 中国电信股份有限公司 | 基于云存储的文件系统去重方法及装置 |
CN103518364A (zh) * | 2013-03-19 | 2014-01-15 | 华为技术有限公司 | 分布式存储系统的数据更新方法及服务器 |
CN103218455A (zh) * | 2013-05-07 | 2013-07-24 | 中国人民解放军国防科学技术大学 | Key-Value数据库用户请求的高速并发处理方法 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107451461A (zh) * | 2017-06-28 | 2017-12-08 | 江苏通付盾信息安全技术有限公司 | 移动设备的设备指纹处理方法、装置、服务器及存储介质 |
CN107727082A (zh) * | 2017-11-09 | 2018-02-23 | 国家海洋局第二海洋研究所 | 一种实时监测浮标的模块化系统 |
CN107727082B (zh) * | 2017-11-09 | 2023-08-04 | 自然资源部第二海洋研究所 | 一种实时监测浮标的模块化系统 |
CN108170768A (zh) * | 2017-12-25 | 2018-06-15 | 腾讯科技(深圳)有限公司 | 数据库同步方法、装置及可读介质 |
CN108170768B (zh) * | 2017-12-25 | 2023-03-24 | 腾讯科技(深圳)有限公司 | 数据库同步方法、装置及可读介质 |
WO2020019749A1 (zh) * | 2018-07-24 | 2020-01-30 | 华为技术有限公司 | 一种数据分片方法、相关设备及计算机存储介质 |
CN110851525A (zh) * | 2018-07-24 | 2020-02-28 | 华为技术有限公司 | 一种数据分片方法、相关设备及计算机存储介质 |
CN110928483A (zh) * | 2018-09-19 | 2020-03-27 | 华为技术有限公司 | 数据存储、数据获取方法及设备 |
CN110928483B (zh) * | 2018-09-19 | 2021-04-09 | 华为技术有限公司 | 数据存储、数据获取方法及设备 |
CN111241005A (zh) * | 2020-01-09 | 2020-06-05 | 杭州涂鸦信息技术有限公司 | 一种基于键值对的安全分区存储方法及系统 |
CN114553581A (zh) * | 2022-03-01 | 2022-05-27 | 珠海金山数字网络科技有限公司 | 一种数据处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106844676B (zh) | 2020-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106844676A (zh) | 数据存储方法及装置 | |
CN106874459A (zh) | 流式数据存储方法及装置 | |
CN110096227B (zh) | 数据存储方法、数据处理方法、装置、电子设备及计算机可读介质 | |
US20090024794A1 (en) | Enhanced Access To Data Available In A Cache | |
CN106407207B (zh) | 一种实时新增数据更新方法和装置 | |
AU2018202297A1 (en) | Auto discovery of configuration items | |
JP6388339B2 (ja) | 分散キャッシングおよびキャッシュ分析 | |
US10909086B2 (en) | File lookup in a distributed file system | |
US9026523B2 (en) | Efficient selection of queries matching a record using a cache | |
WO2012044214A1 (en) | Method and arrangement for processing data | |
CN106227769B (zh) | 数据存储方法及装置 | |
CN110109894A (zh) | 非关系型数据库的实现方法、装置、存储介质和设备 | |
CN110427364A (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
JP2020087470A (ja) | データアクセス方法、データアクセス装置、機器及び記憶媒体 | |
CN112579595A (zh) | 数据处理方法、装置、电子设备及可读存储介质 | |
US9569519B2 (en) | Client-side directed commands to a loosely coupled database | |
US20170083537A1 (en) | Mapping logical identifiers using multiple identifier spaces | |
Fu et al. | Data correlation‐based analysis methods for automatic memory forensic | |
EP4295235A1 (en) | Cache indexing using data addresses based on data fingerprints | |
CN105389394A (zh) | 基于多个数据库集群的数据请求处理方法及装置 | |
US9009098B1 (en) | Methods and apparatus for creating a centralized data store | |
CN116975649A (zh) | 数据处理方法、装置、电子设备、存储介质及程序产品 | |
CN115174158B (zh) | 基于多云管理平台的云产品配置检查方法 | |
CN116578641A (zh) | 一种基于ketama算法的分库方法和系统 | |
CN111209304B (zh) | 数据处理方法、装置及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20200707 |