索引创建和数据查询方法、装置及设备
技术领域
本说明书实施例涉及信息技术领域,尤其涉及索引创建和数据查询方法、装置及设备。
背景技术
在中心化的数据库服务方以块链式的账本对外提供服务时,账本中记录了相关用户所需要保存的相关数据记录。
在实际应用中,中心化的数据库服务方所对接的用户需要进行存储的数据记录,往往具有不同的业务属性。例如,数据记录的来源、用户、所属项目等等。在块链式账本中对于同一业务属性相关的数据记录的存储往往是无序的,用户查询得到的结果往往也是无序的。
基于此,需要一种关于在块链式账本实现有序查询的索引创建和查询方案。
发明内容
本申请实施例的目的是提供一种关于在块链式账本实现有序查询的索引创建和查询方案。
为解决上述技术问题,本申请实施例是这样实现的:
一方面,本说明书实施例提供一种索引创建方法,应用于通过块链式账本存储数据的中心化的数据库服务端中,包括:
获取数据记录中所包含的业务属性和编号,其中,所述编号由客户端所确定;
确定所述数据记录在账本中的位置信息,所述位置信息包括数据记录所处的数据块的块高,以及,在所处的数据块中的偏移量;
生成包含业务属性和编号的合并字段;
建立所述合并字段和位置信息的对应关系,写入以所述合并字段为主键的索引。
另一方面,本说明书实施例提供一种基于前述索引的数据查询方法,包括:
接收包含业务属性的查询指令;
根据所述业务属性,从索引表中进行匹配,确定在所述索引表中包含所述业务属性的各主键所对应的位置信息;
根据所述位置信息从所述账本中获取对应的数据记录,并返回获取得到的对应的数据记录至查询指令发送方。
与一方面对应的,本说明书实施例还提供一种基于前述索引的查询装置,包括:
指令接收模块,接收包含业务属性的查询指令;
匹配模块,根据所述业务属性,从索引表中进行匹配,确定在所述索引表中包含所述业务属性的各主键所对应的位置信息;
数据获取模块,根据所述位置信息从所述账本中获取对应的数据记录,并返回获取得到的对应的数据记录至查询指令发送方。
通过本说明书实施例所提供的方案,对于写入账本的数据记录,确定出数据记录的业务属性和编号,生成包含业务属性和编号的合并字段,以及在账本中的存储位置,建立起合并字段和位置信息的对应关系,从而实现在索引中就包含了用户所指定的编号信息,进而当用户需要进行查询时,数据库服务端可以根据合并字段中的编号得到有序的查询结果并返回给用户,实现在块链式账本中的有序查询。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书实施例。
此外,本说明书实施例中的任一实施例并不需要达到上述的全部效果。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本说明书实施例所涉及的***架构示意图;
图2为本说明书实施例所提供的一种生成块链式账本的流程示意图;
图3为本说明书实施例所提供的一种数据块的块头的示意图;
图4是本说明书实施例提供的一种索引创建方法的流程示意图;
图5为本说明书实施例所提供的一种基于前述索引的数据查询方法的流程示意图;
图6为本说明书实施例所提供的一种索引创建装置;
图7是本说明书实施例提供的一种查询装置的结构示意图;
图8是用于配置本说明书实施例方法的一种设备的结构示意图。
具体实施方式
为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
首先对本说明书实施例中所涉及的中心化下的块链式的账本予以说明。数据库服务端面向的常常为各种机构,各机构则可以将它们与第三方用户(包括其它机构或者个人)之间所产生的数据记录在数据库服务方进行存储。如图1所示,图1为本说明书实施例所涉及的***架构示意图。在该示意图中,一个企业机构可以面向多名用户,而每个用户均可以通过其对应的企业机构向数据库服务提供方进行查询。
例如,数据库服务端对接的机构是某金融产品公司,数据记录可以是个人用户在该金融产品公司的理财记录;或者,对接的机构可以是政府部门,其中的数据记录是政府部门对于该部门所管理的公共项目的开销明细;或者,数据库服务方对接的机构是某个医院,其中的数据记录是病人的病历;或者,数据库服务方对接的机构是第三方支付机构,数据记录可以是个人用户通过该机构的支付记录,等等。
在中心化的数据库服务提供方,块链式的账本通过如下方式生成,如图2所示,图2为本说明书实施例所提供的一种生成块链式账本的流程示意图,包括:
S201,接收待存储的数据记录,确定各数据记录的哈希值,其中,数据记录中包含业务属性和编号。
此处的待存储的数据记录,可以是客户端个人用户的各种消费记录,也可以是应用服务器基于用户的指令,在执行业务逻辑时产生的业务结果、中间状态以及操作记录等等。具体的业务场景可以包括消费记录、审计日志、供应链条、政府监管记录、医疗记录等等。
此处的编号为一数值串,由客户端所确定。具体而言,可以采用如下方式进行确定:
第一种,由用户通过客户端指定,例如,在客户端界面中,提供编号的可写选项,由用户自行填入编号,客户端再根据用户填入的编号生成包含业务属性和编号的数据记录。例如,按照用户的病历时间顺序,依次填入编号,得到多条包含编号的病历记录,在这种方式下,编号直接反应了用户所上传的数据记录的顺序。
第二种,由客户端基于预设的业务逻辑自行确定,例如,在客户端中预设一个用于编号的计数器,用户每通过客户端上传一条数据记录,编号值自动+1,并且把该编号值写入到数据记录中。在这种方式下,编号值反映了用户在客户端的上传顺序,间接的表达了用户所上传的数据记录的顺序。
S203,当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块。
所述预设的成块条件包括:待存储的数据记录数量达到数量阈值,例如,每接收到一千条数据记录时,生成一个新数据块,将一千条数据记录写入块中;或者,距离上一次成块时刻的时间间隔达到时间阈值,例如,每隔5分钟,生成一个新数据块,将在这5分钟内接收到的数据记录写入块中。
此处的N指的是数据块的编号,换言之,在本说明书实施例中,数据块是以块链的形式,基于成块时间的顺序先后排列,具有很强的时序特征。其中,数据块的块高基于成块时间的先后顺序单调递增。块高可以是编号,此时第N个数据块的块高即为N;块高也可以其它方式生成。
当N=1时,即此时的数据块为为初始数据块。初始数据块的哈希值和块高基于预设方式给定。例如,初始数据块中不包含数据记录,哈希值则为任一给定的哈希值,块高blknum=0;又例如,初始数据块的生成触发条件与其它数据块的触发条件一致,但是初始数据块的哈希值由对初始数据块中的所有内容取哈希确定。
当N>1时,由于前一数据块的内容和哈希值已经确定,则此时,可以基于前一数据块(即第N-1个数据块)的哈希值生成当前数据块(第N个数据块)的哈希值,例如,一种可行的方式为,确定每一条将要写入第N个块中的数据记录的哈希值,按照在块中的排列顺序,生成一个默克尔树,将默克尔树的根哈希值和前一数据块的哈希值拼接在一起,再次采用哈希算法,生成当前块的哈希值。又例如,还可以按照块中数据记录的顺序进行拼接并取哈希得到整体数据记录的哈希值,拼接前一数据块的哈希值和整体数据记录的哈希值,并对拼接得到的字串进行哈希运算,生成数据块的哈希值。
上述方式生成的数据块,可以包括块头和块体两个部分。块体中可以用于存储拼接数据的明文,或者拼接数据的哈希值等等;块头中可以用于存储有关本数据块的元数据,例如,账本的版本号,前一数据块的哈希值,自身数据块中的拼接数据所组成的默克尔树的根哈希值,自身数据块的哈希值,用于记录拼接数据的***作状态的状态数组等等。如图3所示,图3为本说明书实施例所提供的一种数据块的块头的示意图。
用户在上传数据成功后,即可以得到对应的数据记录的哈希值以及所处的数据块的哈希值,并保存,并且可以基于该哈希值发起完整性验证。具体的验证方式即为在数据库中重新计算数据记录自身的哈希值以及所处的数据块的哈希值,与本地所保存的进行对比。
通过前述的数据块的生成方式,每一个数据块通过哈希值确定,数据块的哈希值由数据块中的数据记录的内容、顺序以及前一数据块的哈希值决定。用户可以随时基于数据块的哈希值发起验证,对于数据块中任何内容(包括对于数据块中数据记录内容或者顺序的修改)的修改都会造成在验证时计算得到的数据块的哈希值和数据块生成时的哈希值不一致,而导致验证失败,从而实现了中心化下的不可篡改。
在对于块链式的账本进行验证时,一般而言,即指定一段数据块进行连续的完整性验证,或者从初始数据块开始进行连续的完整性验证。验证的方式即为获取前一数据块的哈希值,并采用与生成数据块的哈希值时的同样算法,根据自身的数据记录和前一数据块的哈希值,重新计算一遍自身数据块的哈希值。
如前所述,这些数据记录在写入账本时虽然已经有了较强的时序特征,但是对于用户而言,其数据记录通常是分散式的存储在多个数据块中的。例如,例如,医院对于所有病人的病历记录进行上传。即使用户按照时间产生的顺序,依次上传,也可能因为网络延迟等原因导致病历记录是分散存储于多个数据块中,还可能导致病历记录在账本中的顺序和上传顺序并不一致。而在查询时则一般是基于账本的顺序进行查询,这就给用户带来不便。基于此,本说明书实施例还提供一种索引创建方法,以实现用户的有序查询需求。
如图4所示,图4是本说明书实施例提供的一种索引创建方法的流程示意图,该流程具体包括如下步骤:
S401,获取数据记录中所包含的业务属性和编号,其中,所述编号由客户端所确定。
业务属性在数据记录中的位置和获取方式可以是数据库服务方和对接机构事先协商的。例如,对接机构所提供的数据记录为标准结构化的数据记录时,业务属性可以从数据记录中指定偏移量获取,或者由特定字符标识起始位置和结束位置;又或者,对接机构所提供的数据记录为非结构化的数据时,在对接机构上传时可以直接在每条数据记录的开头拼接上包含业务属性和编号的头部,数据库服务方可以直接从头部获取每条数据记录的业务属性和编号。
S403,确定所述数据记录在账本中的位置信息,所述位置信息包括数据记录所处的数据块的块高,以及,在所处的数据块中的偏移量。
如前所述,一个块链式的账本由多个数据块组成,同时,一个数据块中通常包含多个数据记录。因此,在本说明书实施例中,所述的位置信息具体指的是一条数据记录被保存时,处于账本中的哪个数据块上,以及,在该数据块中的什么位置。
在本说明书实施例所提供的数据块中,可以有多种方式用来标识不同的数据块,包括数据块的哈希值或者块高。
数据块的哈希值为根据前一区块哈希值和自身数据记录进行哈希计算而得到的哈希值,可以用于唯一、明确地标识一个数据块。在块链式的账本中,通常第一个数据块其块高为0,以后每增加一个数据块,块高加1;或者,还可以将数据块的成块时间转换为一个大的单调递增整型数据(一般为12至15位)序列,作为数据块的块高。因此,一个数据块通常有一个明确的块高。
又例如,在一个已经确定的要写入数据库的数据块,其中数据记录的排序也已经固定,因此一个数据记录在该数据块中的序号也是明确的,在数据记录的长度为固定单位时,数据块中的序号同样可以用于明确该数据记录在其所处的数据块中的位置信息。即,数据块中的序号也可以用于指示偏移量。
同时,在一个数据块中,由于通常包含了多个数据记录,因此,还可以用各数据记录在该数据块中的地址偏移量来分别标识数据块中的数据记录。显而易见,在同一个数据块中,各数据记录的地址偏移量并不相同。
当然,由于在本说明书实施例所提供的方式中,数据块的具体格式是可以自定义的(例如,数据块的块头中所包含的元数据信息和备注信息,数据块的块高所采取的形式等等),在不同的格式下,位置信息的内容也会有所不同,这并不构成对本方案的限定。
S405,生成包含业务属性和编号的合并字段。
具体而言,可以将业务属性和编号直接拼接,可以是业务属性+编号的形式,也可以是编号+业务属性的形式。
S407,建立所述合并字段和位置信息的对应关系,写入以所述合并字段为主键的索引。
如表1所示,表1为本说明书实施例所提供的一种示例性索引表。其中Key即为包含了业务属性和编号的合并字段,Value部分的数组即为一条位置信息,数组中的前部分块高,后部分为数据记录在该数据块中的序号,通过块高和序号即可以唯一的确定一条数据记录。容易理解,在索引表中,一个key唯一对应于一个位置信息。其中的“Bingli”即为业务属性,“001”即为客户端所给出的编号。
表1
Key |
Value |
Bingli001 |
(2,08) |
Bingli003 |
(2,10) |
Bingli002 |
(3,99) |
…… |
…… |
在一种实施例中,数据库服务方在获取数据记录中的业务属性和编号时,一种获取方式可以同步创建,即接收到数据记录的时候即直接解析得到业务属性和编号,并且得到合并字段,在数据块写入账本时,同步创建索引。另一种方式则为,在数据块写入账本以后,并不需要立即创建索引,而是在数据库有空余资源的时候,再针对新写入账本的数据块中的每条数据记录获取业务属性和编号,生成合并字段,实现异步创建索引,在异步创建的方式下,有利于数据库服务端节省资源。
在一种实施方式中,可以将编号拼接在业务属性之后,生成包含业务属性和编号的合并字段。在这种方式下,还可以按照所述合并字段中所包含的编号对合并字段进行排序,将所述合并字段依序写入所述以所述合并字段为主键的索引。
例如,在表1中,根据“Bingli001”、“Bingli003”以及“Bingli002”的编号进行排序,从而实现在表1中的包含有相同业务属性的主键“Bingli001”、“Bingli002”以及“Bingli003”的顺序排列。而这个顺序是基于客户端所确定的编号来实现的。换言之,用户的数据记录的顺序性在索引中已经得到了一定的体现。
通过本说明书实施例所提供的方案,对于写入账本的数据记录,确定出数据记录的业务属性和编号,生成包含业务属性和编号的合并字段,以及在账本中的存储位置,建立起合并字段和位置信息的对应关系,从而实现在索引中就包含了用户所指定的编号信息。
另一方面,在索引表被创建以后,即可以基于该索引表进行业务属性的状态查询以及统计。如图5所示,图5为本说明书实施例所提供的一种基于前述索引的数据查询方法的流程示意图,包括:
S501,接收包含业务属性的查询指令。
例如,接收包含业务属性具体值的查询请求(一般而言,查询请求可以以指令的形式予以发送)。查询请求可以来自于对接机构,也可以是来自于对接机构的服务用户。从而,数据库可以根据业务属性的具体值,从索引表中进行匹配。例如,在表1被创建之后,用户通过客户端向服务端输入查询指令,Retrieve(bingli,&v,FULL)。
S503,根据所述业务属性,从索引表中进行匹配,确定在所述索引表中包含所述业务属性的各主键所对应的位置信息。
在这种查询方式下,数据库服务端将会首先查询所有包含有业务属性的主键,在表1的实例中,即可以得到“bingli001”、“bingli003”、“bingli002”等等,并且依次确定各主键所对应的位置信息(2,08)、(2,10)和(3,99)等等。
S505,根据所述位置信息从所述账本中获取对应的数据记录,并返回获取得到的对应的数据记录至查询指令发送方。
在这种方式下,通常而言即根据获取得到的主键的顺序进行数据记录的读取,即依次读取“bingli001”、“bingli003”、“bingli002”的位置信息所对应的数据记录,在这种方式下,用户得到的数据记录的顺序也将是按照主键在索引中的顺序“bingli001”、“bingli003”、“bingli002”进行排列的。
如前所述,索引表中的主键可以根据编号进行重排序,那么容易理解,此时的主键将会是顺序排列的,在这种方式下,得到的数据记录的顺序将会是按照编号依次排列的,从而满足了用户的需要。
在一种查询方式下,数据库服务端在索引表中获取得到了包含有指令中的业务属性的各主键时,还可以直接从主键中获取编号,进而基于主键和数据记录的一一对应关系,根据编号对查询得到的数据机灵进行排序,得到有序的数据记录集合(即各数据记录按照各自所包含的编号依次排列),并且返回有序的数据记录集合至查询指令发送方。在这种方式下,即使索引表中没有进行过主键的重新排序,也可以实现数据记录的顺序查询。
此外,用户还可以直接输入包含有编号的查询指令,在这种方式下,数据库服务端首先需要根据编号和业务属性确定对应的主键,在一种实施方式中,如果查询指令中仅包含一个编号,例如Retrieve(bingli,001,&v),则此时,可以确定对应的主键为“bingli001”,从而查询位置信息(2,08);在另一种实施方式中,查询指令中还可以包含一个或者多个编号区间,例如Retrieve(bingli,(001,007),(100,110),&v),从而可以确定对应的主键是从“bingli001”至“bingli007”,以及,“bingli100”至“bingli110”,并且,在返回数据时依然是根据编号顺序排列,通过这种方式可以实现在块链式账本中精确的有序查询。
与一方面对应的,本说明书实施例还提供一种索引创建装置,应用于通过块链式账本存储数据的中心化的数据库服务端中,如图6所示,图6为本说明书实施例所提供的一种索引创建装置,包括:
获取模块601,获取数据记录中所包含的业务属性和编号,其中,所述编号由客户端所确定;
位置信息确定模块603,确定所述数据记录在账本中的位置信息,所述位置信息包括数据记录所处的数据块的块高,以及,在所处的数据块中的偏移量;
生成模块605,生成包含业务属性和编号的合并字段;
写入模块607,建立所述合并字段和位置信息的对应关系,写入以所述合并字段为主键的索引。
进一步地,所述生成模块605,将编号拼接在业务属性之后,生成包含业务属性和编号的合并字段。
进一步地,所述生成模块605,按照所述合并字段中所包含的编号对合并字段进行排序,将所述合并字段依序写入所述以所述合并字段为主键的索引。
进一步地,所述装置还包括数据块生成模块609,接收待存储的数据记录,确定各数据记录的哈希值,其中,数据记录中包含业务属性和编号;当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块,具体包括:
当N=1时,初始数据块的哈希值和块高基于预设方式给定;
当N>1时,根据待写入数据块中的各数据记录和第N-1个数据块的哈希值确定第N个数据块的哈希值,生成包含第N个数据块的哈希值和各数据记录的第N个数据块,其中,数据块的块高基于成块时间的先后顺序单调递增。
进一步地,所述预设的成块条件包括:待存储的数据记录数量达到数量阈值;或者,距离上一次成块时刻的时间间隔达到时间阈值。
与另一方面对应的,本说明书实施例还提供一种基于前述索引的查询装置装置,如图7所示,图7是本说明书实施例提供的一种查询装置的结构示意图,包括:
指令接收模块701,接收包含业务属性的查询指令;
匹配模块703,根据所述业务属性,从索引表中进行匹配,确定在所述索引表中包含所述业务属性的各主键所对应的位置信息;
数据获取模块705,根据所述位置信息从所述账本中获取对应的数据记录,并返回获取得到的对应的数据记录至查询指令发送方。
进一步地,所述装置还包括编号确定模块707,用于在根据所述位置信息从所述账本中获取对应的数据记录之前,确定在所述索引表中包含所述业务属性的各主键中所包含的编号,相应的,所述数据获取模块705,根据所述编号对查询得到的数据记录进行排序,生成有序的数据记录集合;将所述有序的数据记录集合返回至查询指令发送方。
记忆布地,所述接收模块701,接收包含业务属性和编号的查询指令;相应的,所述匹配模块703,根据所述业务属性和编号,从索引表中进行匹配,根据所述业务属性和编号确定主键,确定在所述索引表获取中由所述业务属性和编号所确定的主键所对应的位置信息。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现图4所示的索引创建方法。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现图5所示的数据查询方法。
图8示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作***和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现图4所示的索引创建方法。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现图5所示的数据查询方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的***、方法、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的方法实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。