一种数据存储方法、装置、设备及可读存储介质
技术领域
本申请涉及摄像机技术领域,特别涉及一种数据存储方法、装置、设备及可读存储介质。
背景技术
区块链支持隐私链后,每一笔隐私交易会包含若干笔UTXO、每个UTXO交易在环签名时会在数据库中随机获取之前的output构成环(默认环大小为11,因此一个UTXO环签名操作会触发11次读数据库的操作)。
当前区块链仅支持单LSM-tree存储能力,且LSM-tree存储引擎定义可知,LSM-tree的一次读操作往往会伴随多个sstable文件的读写,数据量级越大,磁盘io读放大问题越明显。当读命中率过低时,还会触发LSM-tree存储引擎的Major Compaction行为,会极大的降低整体读写性能。
因此,如何提高提高区块链存储设备的整体读写性能,是本领域技术人员需要解决的问题。
发明内容
本申请的主要目的在于提供一种数据存储方法、装置、设备及可读存储介质,以提高区块链存储设备的整体读写性能。
为实现上述目的,本申请提供了一种数据存储方法,包括:
利用自定义通用存储接口对区块链的多种存储引擎进行响应;其中,所述区块链支持隐私链;
按照B+树结构对多种所述存储引擎对应的存储数据进行管理;
在所述区块链的目标区块完成一轮共识后,获得所述目标区块对应的未花费交易输出;
将所述未花费交易输出的主键,按照字典序排序依次递增的方式进行存储,以保障每一组KV记录均尾插入所述B+树。
优选地,所述按照B+树结构对多种所述存储引擎对应的存储数据进行管理,包括:
在当前数据页的自由空间使用完毕后,利用B+树存储引擎创建新的数据页,并为所述数据页分配全局唯一的页号;
将待存储的数据插入所述数据页中。
优选地,所述按照B+树结构对多种所述存储引擎对应的存储数据进行管理,包括:
接收并解析数据查询请求,确定待查询数据对应的目标主键;
查询所述B+树对应的根目录页进行查询,确定出所述目标主键对应的存储页;其中,所述B+树的目录页为基于主键大小有序排列存储的;
从所述存储页中读取所述目标主键对应的数据记录,获得所述待查询数据。
优选地,从所述存储页中读取所述目标主键对应的数据记录,获得所述待查询数据,包括:
利用二分法在所述存储页中参照所述目标主键对应的所述数据记录,获得所述待查询数据。
优选地,查询所述B+树对应的根目录页进行查询,确定出所述目标主键对应的存储页,包括:
查询所述根目录页,确定出目录中具有所述目标主键的目标页;
读取所述目标页的目录内容,确定出所述目标主键对应的存储页。
优选地,在所述利用自定义通用存储接口对区块链的多种存储引擎进行响应之前,还包括:
按照业务类别拆分数据库,获得多组所述存储引擎。
优选地,所述区块链与多种所述存储引擎,以所述区块链为中心的星型拓扑结构。
为实现上述目的,本申请进一步提供了一种数据存储装置,包括:
多存储引擎支持模块,用于利用自定义通用存储接口对区块链的多种存储引擎进行响应;其中,所述区块链支持隐私链;
存储数据管理模块,用于按照B+树结构对多种所述存储引擎对应的存储数据进行管理;
未花费交易输出获取模块,用于在所述区块链的目标区块完成一轮共识后,获得所述目标区块对应的未花费交易输出;
数据整理模块,用于将所述未花费交易输出的主键,按照字典序排序依次递增的方式进行存储,以保障每一组KV记录均尾插入所述B+树。
为实现上述目的,本申请进一步提供了一种数据存储设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序,以实现前述公开的数据存储方法。
优选地,数据存储设备为组成CDN网络或者区块链网络的节点。
为实现上述目的,本申请进一步提供了一种可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述公开的数据存储方法。
通过以上方案可知,本申请提供了一种数据存储方法,包括:利用自定义通用存储接口对区块链的多种存储引擎进行响应;其中,区块链支持隐私链;按照B+树结构对多种存储引擎对应的存储数据进行管理;在区块链的目标区块完成一轮共识后,获得目标区块对应的未花费交易输出;将未花费交易输出的主键,按照字典序排序依次递增的方式进行存储,以保障每一组KV记录均尾插入B+树。
该方法可支持不同的存储引擎,可以根据业务的具体需求来定制存储模块,使区块链业务在日后更加灵活的兼容各种模式的存储需求。特别地,该方法可用于支持B+树结构对应的存储引擎,即,可按照B+树结构对存储数据进行管理,可利用B+树结构对应存储引擎的快速读取性能,在支持隐私链时,快速获得环签名。在支持隐私链的区块链的目标区块完成一轮共识后,获得未花费交易输出,可将未花费交易输出的主键按照字典序排序依次递增的方式进行存储,以保障每一组KV记录均尾插入B+树,可避免B+树结构带来的数据前叉而导致的数据迁移以及树的再平衡问题。也就是说,本方法可以提升区块链存储设备的整体读写性能,能够满足隐私链交易环节签名算法对存储引擎读性能的需求,另外,将存储引擎插件化(即支持多种存储引擎),便于后续应对更多复杂业务需求。
相应地,本申请提供的一种数据存储装置、设备及可读存储介质,也同样具有上述技术效果。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种数据存储方法流程图;
图2为本申请公开的一种区块链与存储引擎的关系示意图;
图3为本申请公开的一种B+树页管理示意图;
图4为本申请公开的一种B+树数据存储组织结构图;
图5为本申请公开的一种数据存储装置示意图;
图6为本申请公开的一种数据存储设备示意图;
图7为本申请公开的另一种数据存储设备示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
为便于理解本申请实施例所提供的技术方案,下面对相关术语进行说明。
区块链:Block chain,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。
交易:transaction,也就是区块链中的转账,是区块中的主要数据,交易最终被打包进入区块,链入区块链中。
SSD:Solid State Drive,固态硬盘,目前市面上最主流的存储介质之一。相较于机械硬盘其具备读写速度快、更高的防震抗摔能力、低功耗、无噪音、轻便、工作温度范围更广等优点。
LSM Tree:Log-Structured Merge-Trees,是一种基于硬盘的数据结构,与B+tree相比,能显著地减少硬盘磁盘寻道开销,并能在较长的时间提供对文件的高速插入(删除)。然而LSM-tree在某些情况下,特别是在查询需要快速响应时性能不佳。通常LSM-tree适用于索引插入比检索更频繁的应用系统。
B树:B-tree,B树是一种平衡多路搜索树,B树与红黑树最大的不同在于,B树的结点可以有多个子女,从几个到几千个。是常见的磁盘数据管理结构。
B+树:B+tree,B+树是对B树的一种变形,在B树的基础上,为叶子结点增加链表指针,所有关键字都在叶子结点中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中。
环签名:Ring signature,环签名指的是在n个公钥中隐藏自己拥有私钥的那个公钥,具体应用就在于区块链上隐藏交易发送人(地址/公钥)。
WAL(Write-Ahead Logging预写日志系统):为了防止写入内存的数据库因为进程异常、系统掉电等情况发生丢失,LSM-tree存储引擎在写内存之前会将本次写操作的内容写入日志文件中。
UTXO:Unspent Transaction Output,未花费交易输出。UTXO交易由交易输入和交易输出组成,每一笔交易都要花费(spend)一笔输入,产生一笔输出(output),而其所产生的输出,就是“未花费过的交易输出”,也就是UTXO。
实施例一:
参见图1,图1为本申请实施例公开的一种数据存储方法流程图。该方法包括:
S101、利用自定义通用存储接口对区块链的多种存储引擎进行响应。
其中,区块链支持隐私链。
其中,自定义通用存储接口的定义如下:
其中,//为注释/解释说明分割符。
按照上述接口定义抽象出通用的db接口(数据库的存储接口)即可满足区块链多存储引擎支持。在本实施例中区块链模块与存储引擎的模块关系图如图2所示。即,区块链与多种存储引擎,以区块链为中心的星型拓扑结构。
需要说明的是,在执行上述步骤S101之前,还可按照业务类别拆分数据库,获得多组所述存储引擎。如此,在本实施例中便可以按业务拆分db,不同的业务基于不同的存储引擎。可以根据业务的具体需求来定制存储模块,使区块链业务在日后更加灵活的兼容各种模式的存储需求。例如,可支持B+树结构存储引擎和LSM—树存储引擎。
其中,区块链支持隐私链,即指区块链能够利用环签名隐藏交易发送人(地址/公钥)。其中,环签名指在n个公钥中隐藏自己拥有私钥的那个公钥,具体应用就在于区块链上隐藏交易发送人(地址/公钥)。即,环签名允许一个签名者代表一个成员集合进行匿名的签名。签名者在签名时可无需其他成员的帮助,甚至可以不让其他成员知道,只需用自己的私钥和其他成员的的公钥就能生成合法的签名。验证时仅可确定签名时来源于群组中的某个成员,但不可追踪签名者的真实身份。
环签名可看做特殊的群签名,即没有管理员的群签名。群签名与环签名都属于匿名的群组签名。不同的是,环签名没有群成员的预定义过程,没有更改、删除群的过程,没有分配密钥的过程,也没有方法撤销真实签名者的匿名性。唯一的假设是所有成员都有一个标准签名算法并对所有人公开。为了生成一个环签名,真实的签名者宣布一个任意的含它自己在内的身份集合叫“可能的签名者”。计算签名用自己的私钥与可能的签名者的公钥。
环签名的安全需求包括:
匿名性:环签名体制需要提供无法撤销的匿名性。即给定一个环签名,除了签名者外,任何人不能知道产生此签名的签名人身份。
不可为造性:指任何不在环L中的人无能力伪造声称是L中成员生成的环签名。
S102、按照B+树结构对多种存储引擎对应的存储数据进行管理。
环签名会对底层存储引擎执行大量的读操作。而目前的LSM-tree存储引擎的读性能较差。而B+tree(B+树)的读性能较佳。因而,在本申请中采用B+树结构对存储数据进行管理。
其中,B+tree管理存储的基本单位为页,一个数据页的成员分为7个部分,有的成员字节数是确定的,有的成员字节数长度不确定。详情见下表:
请参考图3,当不断向一张数据页中插入数据时,页数据管理包括以下步骤:
步骤一、在当前数据页的自由空间使用完毕后,利用B+树存储引擎创建新的数据页,并为数据页分配全局唯一的页号;
步骤二、将待存储的数据插入数据页中。
即Free Space使用完毕后,B+tree存储引擎会创建一个新的数据页,每个数据页都会被分配一个全局唯一的页号。需要注意的是这个页号不是递增的。
不断的插入新的数据,最终的数据存储管理结构如图4所示。
在图4所示的数据结构上,读取数据的过程包括:
步骤一、接收并解析数据查询请求,确定待查询数据对应的目标主键;其中,数据查询请求可由上层应用发出,也可有用户客户端发出。
步骤二、查询B+树对应的根目录页进行查询,确定出目标主键对应的存储页;其中,B+树的目录页为基于主键大小有序排列存储的;
步骤三、从存储页中读取目标主键对应的数据记录,获得待查询数据。
为便于描述,下面对上述三个步骤结合起来进行说明。
其中,从存储页中读取目标主键对应的数据记录,获得待查询数据,可具体为利用二分法在存储页中参照目标主键对应的数据记录,获得待查询数据。
其中,查询B+树对应的根目录页进行查询,确定出目标主键对应的存储页,可具体为查询根目录页,确定出目录中具有目标主键的目标页;读取目标页的目录内容,确定出目标主键对应的存储页。
为便于理解,下面请参考图4,对需要重新主键为5的数据的查询过程为例对查询过程进行详细说明。
当需要查询主键为5的数据时,首先从根目录页666开始查询,由于目录页中的存储也是基于主键大小有序排列的,B+tree很容易可以定位到下一个查询页为55。在页55中,B+tree继续通过二分法查定位到主键5的数据在页3中(页55中有3个目录项,分别为1,4,7。由于主键5>=4&&5<7可以得知下一步需要探索页3)。当进入页3中,继续通过二分法查找,查询到了主键为5的数据记录。
S103、在区块链的目标区块完成一轮共识后,获得目标区块对应的未花费交易输出。
其中,区块链(Blockchain)即借由密码学串接并保护内容的串连交易记录(又称区块)。在本实施例中,目标区块即为即将入链的区块。
区块入链之前需要完成共识,在完成一轮共识之后,一个区块在完成一轮共识后会有序的存储所有的UTXO(未花费交易输出)。
由于B+tree为树型结构,而凡树型结构就需要考虑到数据前插导致的数据迁移以及树的再平衡等问题。因此,在本实施例中,在完成一轮共识之后,先确定出目标区块中的未花费交易输出。
S104、将未花费交易输出的主键,按照字典序排序依次递增的方式进行存储,以保障每一组KV记录均尾插入B+树。
将UTXO的key(主键)设计为字典序排序依次递增的方式进行存储。保证每一组kv记录都是尾插入B+tree。如此,可以极大的降低数据迁移所带来的开销,同时也能够有效的降低树的再平衡所带来的开销。
其中,字典序即对于数字1、2、3......n的排列,不同排列的先后关系是从左到右逐个比较对应的数字的先后来决定的。例如对于5个数字的排列12354和12345,排列12345在前,排列12354在后。按照这样的规定,5个数字的所有的排列中最前面的是12345,最后面的是54321。字典序具体如下:p为1~n的一个全排列:p=p1p2......pn=p1p2......pj-1pjpj+1......pk-1pkpk+1......pn;
1)、从排列的右端开始,找出第一个比右边数字小的数字的序号j(j从左端开始计算),即j=max{i|pi<pi+1};
2)、在pj的右边的数字中,找出所有比pj大的数中最小的数字pk,即k=max{i|pi>pj}(右边的数从右至左是递增的,因此k是所有大于pj的数字中序号最大者);
3)、对换pj,pk;
4)、将pj+1......pk-1pkpk+1......pn倒转得到排列p'=p1p2.....pj-1pjpn.....pk+1pkpk-1.....pj+1,即排列p的下一个排列。
可见,本申请所提供的数据存储方法可支持不同的存储引擎,可以根据业务的具体需求来定制存储模块,使区块链业务在日后更加灵活的兼容各种模式的存储需求。特别地,该方法可用于支持B+树结构对应的存储引擎,即,可按照B+树结构对存储数据进行管理,可利用B+树结构对应存储引擎的快速读取性能,在支持隐私链时,快速获得环签名。在支持隐私链的区块链的目标区块完成一轮共识后,获得未花费交易输出,可将未花费交易输出的主键按照字典序排序依次递增的方式进行存储,以保障每一组KV记录均尾插入B+树,可避免B+树结构带来的数据前叉而导致的数据迁移以及树的再平衡问题。也就是说,本方法可以提升区块链存储设备的整体读写性能,能够满足隐私链交易环节签名算法对存储引擎读性能的需求,另外,将存储引擎插件化(即支持多种存储引擎),便于后续应对更多复杂业务需求。
实施例二:
下面对本申请实施例提供的一种数据存储装置进行介绍,下文描述的一种数据存储装置与上文描述的一种数据存储方法可以相互参照。
需要说明的是,关于本实施例中各个模块、单元更加具体的工作过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
参见图5,图5为本申请实施例公开的一种数据存储装置示意图。该装置包括:
多存储引擎支持模块101,用于利用自定义通用存储接口对区块链的多种存储引擎进行响应;其中,区块链支持隐私链;
存储数据管理模块102,用于按照B+树结构对多种存储引擎对应的存储数据进行管理;
未花费交易输出获取模块103,用于在区块链的目标区块完成一轮共识后,获得目标区块对应的未花费交易输出;
数据整理模块104,用于将未花费交易输出的主键,按照字典序排序依次递增的方式进行存储,以保障每一组KV记录均尾插入B+树。
可见,本实施例提供了一种数据存储装置,包括:
在一种具体实施方式中,存储数据管理模块102,具体用于在当前数据页的自由空间使用完毕后,利用B+树存储引擎创建新的数据页,并为数据页分配全局唯一的页号;将待存储的数据插入数据页中。
在一种具体实施方式中,存储数据管理模块102,包括:
目标主键确定单元,用于接收并解析数据查询请求,确定待查询数据对应的目标主键;
存储页确定单元,用于查询B+树对应的根目录页进行查询,确定出目标主键对应的存储页;其中,B+树的目录页为基于主键大小有序排列存储的;
数据读取单元,用于从存储页中读取目标主键对应的数据记录,获得待查询数据。
在一种具体实施方式中,数据读取单元,具体用于利用二分法在存储页中参照目标主键对应的数据记录,获得待查询数据。
在一种具体实施方式中,存储页确定单元,具体用于查询根目录页,确定出目录中具有目标主键的目标页;读取目标页的目录内容,确定出目标主键对应的存储页。
在一种具体实施方式中,还包括:
存储引擎设置模块,用于在利用自定义通用存储接口对区块链的多种存储引擎进行响应之前,按照业务类别拆分数据库,获得多组存储引擎。
在一种具体实施方式中,区块链与多种存储引擎,以区块链为中心的星型拓扑结构。
实施例三:
下面对本申请实施例提供的一种数据存储设备进行介绍,下文描述的一种数据存储设备与上文描述的一种数据存储方法及装置可以相互参照。
参见图6,图6为本申请实施例公开的一种数据存储设备示意图。该设备包括:
存储器501,用于保存计算机程序;
处理器502,用于执行计算机程序,以实现以下步骤:
利用自定义通用存储接口对区块链的多种存储引擎进行响应;其中,区块链支持隐私链;
按照B+树结构对多种存储引擎对应的存储数据进行管理;
在区块链的目标区块完成一轮共识后,获得目标区块对应的未花费交易输出;
将未花费交易输出的主键,按照字典序排序依次递增的方式进行存储,以保障每一组KV记录均尾插入B+树。
下面对本申请实施例提供的一种数据存储设备进行介绍,下文描述的一种数据存储设备与上文描述的一种数据存储方法及装置可以相互参照。
在本实施例中,处理器执行存储器中保存的计算机子程序时,可以具体实现以下步骤:按照B+树结构对多种存储引擎对应的存储数据进行管理,包括:
在当前数据页的自由空间使用完毕后,利用B+树存储引擎创建新的数据页,并为数据页分配全局唯一的页号;
将待存储的数据插入数据页中。
在本实施例中,处理器执行存储器中保存的计算机子程序时,可以具体实现以下步骤:按照B+树结构对多种存储引擎对应的存储数据进行管理,包括:
接收并解析数据查询请求,确定待查询数据对应的目标主键;
查询B+树对应的根目录页进行查询,确定出目标主键对应的存储页;其中,B+树的目录页为基于主键大小有序排列存储的;
从存储页中读取目标主键对应的数据记录,获得待查询数据。
在本实施例中,处理器执行存储器中保存的计算机子程序时,可以具体实现以下步骤:从存储页中读取目标主键对应的数据记录,获得待查询数据,包括:
利用二分法在存储页中参照目标主键对应的数据记录,获得待查询数据。
在本实施例中,处理器执行存储器中保存的计算机子程序时,可以具体实现以下步骤:查询B+树对应的根目录页进行查询,确定出目标主键对应的存储页,包括:
查询根目录页,确定出目录中具有目标主键的目标页;
读取目标页的目录内容,确定出目标主键对应的存储页。
在本实施例中,处理器执行存储器中保存的计算机子程序时,可以具体实现以下步骤:在利用自定义通用存储接口对区块链的多种存储引擎进行响应之前,还包括:
按照业务类别拆分数据库,获得多组存储引擎。
在本实施例中,其中,区块链与多种存储引擎,以区块链为中心的星型拓扑结构。
在本实施例中,数据存储设备可以是PC(Personal Computer,个人电脑),也可以是智能手机、平板电脑、掌上电脑、便携计算机。
该数据存储设备可以是组成CDN(Content Delivery Network)网络或者区块链网络的节点。
参见图7,图7为本申请实施例公开的另一种数据存储设备示意图。该数据存储设备可以包括存储器11、处理器12和总线13。
其中,存储器11至少包括一种类型的可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是数据存储设备的内部存储单元,例如该数据存储设备的硬盘。存储器11在另一些实施例中也可以是数据存储设备的外部存储设备,例如数据存储设备上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器11还可以既包括数据存储设备的内部存储单元也包括外部存储设备。存储器11不仅可以用于存储安装于数据存储设备的应用软件及各类数据,例如数据存储程序的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器12在一些实施例中可以是一中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行数据存储程序等。
该总线13可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
进一步地,数据存储设备还可以包括网络接口,网络接口可选的可以包括有线接口和/或无线接口(如WI-FI接口、蓝牙接口等),通常用于在该设备与其他电子设备之间建立通信连接。
可选地,该设备还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在该设备中处理的信息以及用于显示可视化的用户界面。
图7仅示出了具有组件11-13的数据存储设备,本领域技术人员可以理解的是,图7示出的结构并不构成对设备的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
实施例四:
下面对本申请实施例提供的一种可读存储介质进行介绍,下文描述的一种可读存储介质与上文描述的一种数据存储方法、装置及设备可以相互参照。
一种可读存储介质,用于保存计算机程序,其中,计算机程序被处理器执行时实现前述实施例公开的数据存储方法。关于该方法的具体步骤可以参考前述实施例中公开的相应内容,在此不再进行赘述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的可读存储介质中。
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。