一种块链式账本中的数据属性标识方法、装置及设备
技术领域
本说明书实施例涉及信息技术领域,尤其涉及一种块链式账本中的数据属性标识方法、装置及设备。
背景技术
在使用块链式的账本存储数据时,虽然数据是难以篡改的,但是用户仍然可以对已经存储的数据记录进行某些操作。在这个过程中,数据记录的状态会发生变化。
出于业务的需要,用户可能需要查看对于一个或者几个数据块中的各数据记录分别做了什么操作,或者想要了解一个数据块中各数据记录的当前状态。目前的解决方案中没有一种便利的实现对数据块中的数据记录进行状态标记的方法。
发明内容
针对现有块链式的账本中数据记录的状态标记不便的问题,为实现更为便利的识别数据记录的状态,本说明书实施例提供一种块链式账本中的数据属性标识方法、装置及设备,所述方法具体包括:
根据对于数据块中的数据记录的操作方式,确定对所述数据记录的属性标记字符,所述属性标记字符用于标识所述数据记录的最近一次变更状态;
建立所述属性标记字符和所述数据记录的对应关系,将所述对应关系写入所述数据记录所处的数据块中;
其中,除初始数据块以外,每一数据块中包含至少一条数据记录,每一数据块中包含由前一数据块的哈希值和自身所包含的数据记录确定的自身数据块的哈希值,数据块的块高基于成块时间的先后顺序单调递增。
对应的,本说明书实施例还提供一种块链式账本中的数据属性标识装置,包括:
应用于块链式账本中,块链式账本中的数据块包含用于存储数据记录的块体,以及包含用于存储数据记录元数据的块头,所述装置包括:
确定模块,根据对于数据块中的数据记录的操作方式,确定对所述数据记录的属性标记字符,所述属性标记字符用于标识所述数据记录的最近一次变更状态;
建立模块,建立所述属性标记字符和所述数据记录的对应关系;
写入模块,将所述对应关系写入所述数据记录所处的数据块中;
其中,除初始数据块以外,每一数据块中包含至少一条数据记录,每一数据块中包含由前一数据块的哈希值和自身所包含的数据记录确定的自身数据块的哈希值,数据块的块高基于成块时间的先后顺序单调递增。
在块链式存储的账本中,每当用户对于数据记录做出某种类型的操作时,即相应的给出一个操作记录所对应的属性标记字符,将该属性标记字符与数据记录的对应关系写入位于数据块的块头或者块体中。通过上述方式,可以灵活的对数据记录的状态进行标记,以及方便的对数据块中数据记录的状态进行统计。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书实施例。
此外,本说明书实施例中的任一实施例并不需要达到上述的全部效果。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1是本说明书实施例所涉及的一种块链式账本的结构示意图;
图2是本说明书实施例提供的一种链式账本中的数据属性标识方法的流程示意图;
图3是本说明书实施例所提供的生成带标记的数据记录的示意图;
图4是本说明书实施例提供的一种块链式账本中的数据属性标识装置的结构示意图;
图5是用于配置本说明书实施例方法的一种设备的结构示意图。
具体实施方式
为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
通常意义上,块链式账本包含两种:区块链和类区块链账本。区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(Private Blockchain)和联盟链(Consortium Blockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。无论哪种区块链,都可以认为是去中心化的,数据写入区块链中需要进行各节点的共识,达成数据在各节点的一致性,实现难以篡改。而类区块链的账本则是一种在中心化的场景下进行数据存储的方式,但其同样具有不可篡改的特性。
无论是区块链还是类区块链的账本,其形式上都可以如图1所示。图1是本说明书实施例所涉及的一种块链式账本的结构示意图。一个块链式账本,由多个数据块组成,数据块之间按照成块时间顺序排列。从初始数据块开始,每一个数据块有一个子数据块,每一数据块的哈希值由前一数据块的哈希值和自身所包含的数据记录而确定。在每一个数据块,包含有块头和块体,块头用于存储一些数据块的元数据(例如块高、父数据块哈希、块体中的数据记录构成的默克尔树的根哈希等等),块体则用于存储具体的数据记录。
需要说明的是,在块链式的账本中,数据记录难以被篡改。但是,这并不意味着用户不能对数据记录进行某些特定的操作。
例如,在节点有限的联盟链或者私有链式的区块链账本中,节点可以发起一个用于隐匿包含敏感数据的指定位置的数据记录的交易,在区块链中共识通过以后,以包含原数据记录的哈希值的隐匿化数据替换掉原数据记录,并且不影响区块链的简易支付验证(Simplified Payment Verification,SPV)或者其它验证。又例如,在中心化的类区块链账本中,用户则可以通过预先定义的不同指令对于数据块中的数据进行诸如添加、清除、隐匿等等操作。具体的操作方式将在下文进行详细描述。
随着用户对块链式账本中的数据记录进行了操作,数据记录的状态就相应的发生了改变。用户此时出于业务需要,可能需要了解有哪些数据记录发生了什么改变,以及进行相应的统计。基于此,本说明书实施例提供一种对于数据记录的属性进行记录的方案。
为使本说明书实施例的方案更加浅显易懂,首先对本说明书实施例中所涉及的中心化的类区块链账本的生成方法和形式给予说明。在一个具体的实施例中,类区块链的账本可以由如下方式生成:
首先,中心化的数据库服务提供方接收待存储的数据记录,确定各数据记录的哈希值。此处的待存储的数据记录,可以是客户端个人用户的各种消费记录,也可以是应用服务器基于用户的指令,在执行业务逻辑时产生的业务结果、中间状态以及操作记录等等。具体的业务场景可以包括消费记录、审计日志、供应链条、政府监管记录、医疗记录等等。
然后,当达到预设的成块条件时,数据库服务提供方确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块。
所述预设的成块条件包括:待存储的数据记录数量达到数量阈值,例如,每接收到一千条数据记录时,生成一个新数据块,将一千条数据记录写入块中;或者,距离上一次成块时刻的时间间隔达到时间阈值,例如,每隔5分钟,生成一个新数据块,将在这5分钟内接收到的数据记录写入块中。
此处的N指的是数据块的序号,换言之,在本说明书实施例中,数据块是以块链的形式,基于成块时间的顺序先后排列,具有很强的时序特征。其中,数据块的块高基于成块时间的先后顺序单调递增。块高可以是序号,此时第N个数据块的块高即为N;块高也可以其它方式生成,例如,将块高的生成时间转化为一系列单调递增的大整数(一般为12到15位整型数据),作为块高。
当N=1时,即此时的数据块为为初始数据块。初始数据块的哈希值和块高基于预设方式给定。例如,初始数据块中不包含数据记录,哈希值则为任一给定的哈希值,块高blknum=0;又例如,初始数据块的生成触发条件与其它数据块的触发条件一致,但是初始数据块的哈希值由对初始数据块中的所有数据记录的内容取哈希确定。
当N>1时,由于前一数据块的内容和哈希值已经确定,则此时,可以基于前一数据块(即第N-1个数据块)的哈希值生成当前数据块(第N个数据块)的哈希值,例如,一种可行的方式为,确定每一条将要写入第N个块中的数据记录的哈希值,按照在块中的排列顺序,生成一个默克尔树,将默克尔树的根哈希值和前一数据块的哈希值拼接在一起,再次采用哈希算法,生成当前块的哈希值。又例如,还可以按照块中数据记录的顺序进行拼接并取哈希得到整体数据记录的哈希值,拼接前一数据块的哈希值和整体数据记录的哈希值,并对拼接得到的字串进行哈希运算,生成数据块的哈希值。
通过前述的数据块的生成方式,在中心化的数据库服务提供方,无需进行节点的共识,每一个数据块通过哈希值确定,数据块的哈希值由数据块中的数据记录的内容、顺序以及前一数据块的哈希值决定。
在一个最小的验证粒度下,每一条数据记录均有一个对应的哈希值,用户可以随时基于数据记录或者数据块的哈希值发起验证,对于数据块中任何内容(包括对于数据块中数据记录内容或者顺序)的修改都会造成在验证时计算得到的数据块的哈希值和数据块生成时的哈希值不一致,而导致验证失败,从而实现了中心化下的不可篡改。
基于前述说明,以下结合附图,详细说明本说明书各实施例提供的技术方案。如图2所示,图2是本说明书实施例提供的一种链式账本中的数据属性标识方法的流程示意图,应用于块链式账本中,块链式账本中的数据块包含用于存储数据记录的块体,以及包含用于存储数据记录元数据的块头,该流程具体包括如下步骤:
S201,根据对于数据块中的数据记录的操作方式,确定对所述数据记录的属性标记字符,所述属性标记字符用于标识所述数据记录的最近一次变更状态。
在一种实施方式下,一个区块链中的某些节点可以具有交易隐匿的权限,进一步地,区块链网络中的每个节点都可以具有将交易隐匿的权限。此时,节点可以构建包含目标交易的隐匿指令,并且向区块链网络广播所述隐匿指令,隐匿指令的用途则是对于指定交易进行替换。
本说明书中所描述的交易(transfer),是指用户通过区块链中的节点创建,并需要最终发布至区块链中的一条数据记录。所述的交易隐匿指的是在区块链上将一条交易的明文内容替换为所述交易的交易哈希。
具体而言,当一个节点接收到所述隐匿指令之后,首先验证接收到的隐匿指令是合法的(例如,隐匿指令中包含有某个特殊节点的签名)。然后构建隐匿化数据,隐匿化数据中包括属性标记字符和指定交易的交易哈希。换言之,此时的属性标记字符用于标记这个位置上的交易已经被替换成对应的交易哈希,其中,交易哈希是指,对交易进行一次哈希运算后得到的运算结果。
其它节点在读取该交易时,如果在交易的头部为属性标记字符,即可以知道该条交易已经被进行了相应的替换,此时即可以直接获取该隐匿化数据中的交易哈希,从而实现对于含有敏感内容的交易进行了隐匿,同时还不会影响区块链的可信验证。
在上述方式中,区块链中的节点在确定需要对于交易进行隐匿时,即生成属性标记字符,用于标记该交易的内容已经被隐匿。
在另一种具体的实施方式中,对于中心化场景下的类区块链账本而言,用户可以通过操作指令对于账本中的数据记录进行操作。操作指令可以包含多种类型,例如,添加、清除、隐匿、验证、查询等等。数据库服务方总是可以通过操作指令确定需要进行操作的数据记录。
以下简略给出几种具体的操作指令的形式,及其各自的实现方式。
添加指令,APPEND(v,&khash):用户向账本中添加数据记录“v”,中心化的服务方返回数据记录的哈希值“khash”给用户。
验证指令,VERIFY(‘khash’,&v):用户输入哈希值“khash”,对由哈希值所确定的数据块或者数据记录执行验证,返回验证结果“&v”。验证的方式,即根据数据块中的数据记录构建默克尔树,得到默克尔树的根哈希,根据该根哈希和父数据块的哈希值计算得到一个哈希值,并与该数据块的哈希值对比是否一致。
清除指令,PURGE(lgid,blkbound):用户指定账本标识“lgid”以及块高“blkbound”,服务方基于块高确定块高之前的数据块均为需要清除的数据块,然后清除这些确定需要清除的数据块。并且生成一个伪初始数据块,伪初始数据块的哈希值等于被确定的需要清除的最后一个数据块的哈希值,这样,可以避免在以后进行验证时出现错误。被清除的数据实际上在一定时间的窗口期内(例如,72小时)仍然存在于数据库服务方中,只是形式上已经被从该账本中移出。
隐匿指令,OCCULT(blkheight,txoff):用户指定由块高“blkheight”和指定偏移量“txoff”所确定的一条数据记录,用隐匿化数据替换所述数据记录,隐匿化数据中包含所述数据记录的交易哈希。
查询指令,RETRIEVE(khash,&v):用户输入一个数据记录的哈希值“khash”,查询得到该哈希值所对应的数据记录所处的数据块的块高和数据记录在该数据块中的偏移量“&v”。
上述部分只是对于操作指令简单的给出了几个示例,在实际应用中,数据库服务方还可以基于业务需要给出更多的可执行的操作指令,以及在操作指令中加入其它参数,以实现更复杂的数据库服务。
需要说明的是,实际应用中“操作指令”的表现形式可以是多种多样,但是其对于数据的操作方式则基本相同。基于前述内容,在本说明书实施例中,对于区块链网络中的节点,或者,对于中心化的数据库的服务提供方而言,均可以实现基于操作方式来给与不同的属性标记字符。
例如,对于区块链中的节点而言,当确定了要对数据记录进行隐匿时,生成相应的标记字符;对于中心化的数据库服务方而言,可以基于操作“添加”,给与标记字符“01”,对于操作“清除”,给与标记字符“02”,对于操作“隐匿”,给与标记字符“FF”等等。从而可以通过属性标记字符知道该数据记录的当前状态,以及可以了解该数据记录的最近进行了何种操作。
随着用户对于数据记录进行了不同的操作,那么可以根据最近一次的操作方式,对于数据记录给与相应的属性标记字符,此时,属性标记字符相应的标识了数据记录的最近一次变更状态。
例如,在一种实施方式中,若一条数据记录的标记字符是“01”,则可以知道,该数据记录由用户添加,并且,没有其它操作历史;若一条数据记录的标记字符是“FF”,则可以知道该数据记录的明文内容已经被最近的一次操作所隐匿。
S203,建立所述属性标记字符和所述数据记录的对应关系,将所述对应关系写入所述数据记录所处的数据块中。
在一种实施方式中,可以将属性标记字符和所述数据记录的对应关系写入数据块的区块体中。具体而言,数据库服务方拼接所述属性标记字符和所述数据记录,生成带标记的数据记录;确定所述数据记录在所述数据块中的存储位置;将数据块中所述存储位置中的数据记录替换为所述带标记的数据记录。此时,属性标记字符以前标记字符的形式存在于新生成的带标记的数据记录中。如图3所示,图3是本说明书实施例所提供的生成带标记的数据记录的示意图。
所述的存储位置,是指数据块的块体中,用于存储数据记录的存储空间或存储地址。假设一个块链式的账本中写入了M个数据记录,那么,账本中也同时有M个数据记录的存储位置,分别用于存储这M个数据记录。一条数据记录的存储位置,指的是该数据记录所在的数据块的块高,以及该数据记录在数据块中的顺位号。例如,包含有数据记录A的数据块的块高是5,并且,数据记录A是该数据块中的第10个数据记录。因此,数据记录A对应的存储位置可以是(5,10)。
需要说明的是,在这种实施方式下,属性标记字符不参与数据记录或者块体的哈希值运算。区块链中的节点或者数据库服务提供方在计算数据记录的哈希时,可以略去属性标记字符。
在这种实施方式下,还可以附带的构建出带更多信息的用于替换的数据记录。例如,用于替换的数据记录的形式可以是:前标记字符+数据记录+后标记字符+备注信息。
替换数据的生成方式可以是:将预设的前标记字符拼接到数据记录的首部,将预设的后标记字符拼接到数据记录的尾部,并且,将备注信息拼接到所述后标记字符的尾部;然后,将所述前标记字符、所述数据记录或者数据记录哈希(一般而言,在接收到隐匿指令时,会采用数据记录哈希替换掉数据记录明文,其它操作指令不变)、所述后标记字符以及所述备注信息拼接成的数据确定为用于替换的数据记录。
上述的前标记字符与后标记字符可以根据实际需要进行指定。例如,所述前标记字符可以为“OE”,所述后标记字符可以为“OF”。
还需要说明的是,所述备注信息具体可以是为实现特定业务需要所添加的信息。例如,所述备注信息可以是“hidden”,表明所述数据记录已经被隐匿。当用户基于数据记录的哈希值查询对应的数据记录时,所述备注信息可以提示该数据记录是不可见的。
在一种实施例中,当一个数据记录已经有了作为前标记字符的属性标记字符时,如果此时再对该数据进行了操作,则可以直接替换相应的属性标记字符。例如,一个由用户添加的数据记录,其在块体中的存储形式为:[01][数据记录明文],其中的“01”即为“添加”所对应的属性标记字符,若此时用户对该数据记录所处的数据块执行了“清除”操作,则此时该数据记录也被清除,由于“清除”所对应的属性标记字符为“02”,则此时,该数据记录在块体中的存储形式成为:[02][数据记录明文],避免了再次生成替换数据的操作,只需替换相应的属性标记字符就可以了。
换言之,在这种实施方式下,块体中数据记录的格式可以是事先定义的,每天数据记录的格式即为:[属性标记字符][数据记录明文]。即,一条数据记录中包含头部和尾部,头部用于存储属性标记字符,尾部用于存储数据记录明文。头部不参与数据记录的哈希值的计算,每当数据记录被操作时,根据操作类型更改数据记录的头部即可。
在另一种实施方式中,可以通过一个数组存储所述标记字符和数据记录的对应关系,并且将所述数组存储在数据块的块头中。
数据块中的数据记录可以通过位置信息来确定,以进行标识。位置信息可以是数据记录在块体中的偏移量,或者,位置信息还可以是数据记录在块体中的存储序号。
例如,数组中的元素可以是如下键值对的形式:(位置信息,属性标记字符),数组的形式可以是:{(位置信息1,属性标记字符1),(位置信息2,属性标记字符3),(位置信息6,属性标记字符1),……}。当用户对数据记录进行过操作之后,即生成一个相应的数组元素,或者对数组元素中的属性标记字符进行修改。
在这种实施方式下,不同的数组元素中的位置信息不会相同。此时,数组中不必存储所有数据记录的状态信息,只需存储有发生过状态变化的数据记录的状态信息。
又例如,数组中的元素可以是如下键值对的形式:(属性标记字符1;位置信息1,位置信息2,……),数组的形式可以如下所示:{(属性标记字符1;位置信息1,位置信息2,……),(属性标记字符2;位置信息9,位置信息10,……),……}。
在这种实施方式下,不同的数组元素中的属性标记字符不会相同,一个属性标记字符可以对应于多个位置信息。此时,一个数据元素中即记载了最近的状态相同的多个数据记录,便于后续统计。
在一种实施方式中,数组还可以是其它的形式。例如,首先确定块体中的数据记录的条数,生成完全对应于数据记录的一个数组,数组中的每个数组元素依序对应于一条数据记录,每一个数组元素有一个默认的初始标记字符,初始标记字符的值可以基于预设方式给定,例如,给定初始标记字符为“00”。每当数据记录被用户执行了某种操作时,对应的数组元素即被修改为对应的标记字符。
例如,一个数据块的块体中有1000条数据记录,则对应的在数据块的块头中生成相应的包含1000个数组元素的数组,每个数组元素依序对应于一条数据记录,此时,数组的形式可以是如下所示:{初始标记字符,属性标记字符1,属性标记字符2,属性标记字符3,初始标记字符,……}。每当对一条数据记录进行了某种操作时,直接在该数据中根据数据记录的序号对属性标记字符进行修改就可以了。
在这种实施方式下,数据记录的位置信息已经通过排序的方式隐藏在了数据记录的元素中,数组中不必再以明文的形式存储数据记录的位置信息,可以节省存储空间。
进一步地,对于中心化的数据库服务提供方而言,可以预先确定操作指令的类型和属性标记字符的对应关系,从而在接收到相应的操作指令时,即可以根据操作指令的类型来确定相应的属性标记字符。在不同的数据库服务提供方中,由于操作指令和属性标记字符都是可以自定义的,例如,在一个数据库服务提供方中,设定了添加操作指令为“append”,对应的属性标记字符为“01”,而在另一个数据库服务提供方中,可以设定添加操作指令为“add”,对应的属性标记字符为“OE”,此时,基于操作指令的不同形式,上述对应关系也可以基于操作指令和属性标记字符的不同形式给与调整,更为灵活。
此外,还可以在块链式的账本之外建立一个相应的状态索引,以便查询。具体的索引建立方式为:确定所述数据记录所处的数据块的块高和在所述数据块中的偏移量;建立包含所述块高、偏移量和属性标记字符的对应关系的索引表,并存储。此时,索引表中的元素的形式为:(数据记录的哈希值,块高,偏移量,属性标记字符)。用户如果想查询某一条数据记录的状态时,则可以输入该数据记录的哈希值从索引中进行查询即可。在上述索引中,数据记录的哈希值可以作为数据记录的标识存在索引中。
此外,在实际应用中,对于数据记录的每次操作也可以写入账本中进行存证。例如,可以通过在数据库服务提供方部署智能合约的形式,数据库服务提供方每当接收到操作指令时,即可以将操作指令封装成数据记录写入区账本中,进一步提高数据记录状态的真实性。
对应的,本说明书实施例还提供一种块链式账本中的数据属性标识装置,应用于块链式账本中,块链式账本中的数据块包含用于存储数据记录的块体,以及包含用于存储数据记录元数据的块头,如图4所示,图4是本说明书实施例提供的一种块链式账本中的数据属性标识装置的结构示意图,包括:
确定模块401,根据对于数据块中的数据记录的操作方式,确定对所述数据记录的属性标记字符,所述属性标记字符用于标识所述数据记录的最近一次变更状态;
建立模块403,建立所述属性标记字符和所述数据记录的对应关系;
写入模块405,将所述对应关系写入所述数据记录所处的数据块中;
其中,除初始数据块以外,每一数据块中包含至少一条数据记录,每一数据块中包含由前一数据块的哈希值和自身所包含的数据记录确定的自身数据块的哈希值,数据块的块高基于成块时间的先后顺序单调递增。
进一步地,所述装置还包括数据块生成模块407,接收待存储的数据记录,确定各数据记录的哈希值;当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块,具体包括:当N=1时,初始数据块的哈希值和块高基于预设方式给定;当N>1时,根据待写入数据块中的各数据记录和第N-1个数据块的哈希值确定第N个数据块的哈希值,生成包含第N个数据块的哈希值和各数据记录的第N个数据块,其中,数据块的块高基于成块时间的先后顺序单调递增。
进一步地,所述确定模块401,接收对于数据记录的操作指令,根据所述操作指令的类型确定所述数据记录的属性标记字符。
进一步地,所述写入模块403,确定所述数据记录在所述数据块中的位置信息,其中所述位置信息包括在数据块中的偏移量或者存储序号;将所述位置信息和属性标记字符的对应关系写入数据记录状态数组,其中,所述数据记录状态数组位于数据块的块头中。
进一步地,在所述数据记录状态数组中,数组中的每一个元素为数据记录所对应的属性标记字符,按照数据记录在数据块中的顺序排列。
进一步地,在数据记录状态数组中,元素的形式为键值对,数组中的元素,以属性标记字符为键,以位置信息为值;或者,数组中的元素,以位置信息为键,以属性标记字符为值。
进一步地,所述写入模块405,拼接所述属性标记字符和所述数据记录,生成带标记的数据记录;确定所述数据记录在所述数据块中的存储位置;将数据块中所述存储位置中的数据记录替换为所述带标记的数据记录。
进一步地,还包括索引创建模块409,确定所述数据记录所处的数据块的块高和在所述数据块中的偏移量;建立包含所述块高、偏移量和属性标记字符的对应关系的索引表,并存储。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现图2所示的数据属性标识方法。
图5示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器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,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现图2所示的数据属性标识方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的系统、方法、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的方法实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。