本说明书一个或多个实施例涉及数据库技术领域,尤其涉及一种接口实例库的维护方法及装置、电子设备。
背景技术:
随着互联网的快速发展,互联网中各应用的访问量越来越大,而应用出现故障造成影响的范围也随之越来越大。互联网中各个应用之间相互提供服务,若应用出现异常,则会导致严重后果。比如,在互联网的soa(service-orientedarchitecture,面向服务的架构)环境中,所有的应用都是其中的一环,任一应用均为其他应用提供服务,当应用提供服务的接口出现异常时,其他应用的服务也将出现异常,导致服务出错。
技术实现要素:
有鉴于此,本说明书一个或多个实施例提供一种接口实例库的维护方法及装置、电子设备。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种接口实例库的维护方法,包括:
获取接口对应的待验证实例;
当所述接口对应的接口实例库中存在与所述待验证实例相匹配且被标记为正常状态的历史实例时,对所述历史实例的最近出现时刻进行更新;
当不存在与所述待验证实例相匹配的历史实例时,将所述待验证实例添加至所述接口实例库中,且所述待验证实例被标记为未知状态。
根据本说明书一个或多个实施例的第二方面,提出了一种接口实例库的维护装置,包括:
获取单元,获取接口对应的待验证实例;
更新单元,当所述接口对应的接口实例库中存在与所述待验证实例相匹配且被标记为正常状态的历史实例时,对所述历史实例的最近出现时刻进行更新;
标记单元,当不存在与所述待验证实例相匹配的历史实例时,将所述待验证实例添加至所述接口实例库中,且所述待验证实例被标记为未知状态。
根据本说明书一个或多个实施例的第三方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述任一实施例所述的接口实例库的维护方法。
附图说明
图1是一示例性实施例提供的一种接口实例库的维护系统的架构示意图。
图2是一示例性实施例提供的一种接口实例库的维护方法的流程图。
图3是一示例性实施例提供的另一种接口实例库的维护方法的流程图。
图4是一示例性实施例提供的一种更新接口实例库的流程图。
图5是一示例性实施例提供的一种更新实例库缓存的流程图。
图6是一示例性实施例提供的一种修改实例状态的流程图。
图7是一示例性实施例提供的另一种修改实例状态的流程图。
图8是一示例性实施例提供的一种设备的结构示意图。
图9是一示例性实施例提供的一种接口实例库的维护装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
在一实施例中,本说明书的接口实例库的维护方案可以应用于服务器中,该服务器中维护有接口实例库,在运行过程中,服务器可对接口实例库中记录的实例进行状态管理,从而为实时监控分析接口的异常提供基础的数据服务。
图1是一示例性实施例提供的一种接口实例库的维护系统的架构示意图。如图1所示,该系统可以包括服务器11、网络12、服务器13和若干电子设备,比如pc14-15等。
服务器11(或服务器13)可以为包含一独立主机的物理服务器,或者该服务器11(或服务器13)可以为主机集群承载的虚拟服务器。在运行过程中,服务器11(或服务器13)可以运行某一应用的服务器侧的程序,以实现该应用的服务端。而在本说明书一个或多个实施例的技术方案中,可由服务器11(或服务器13)通过与pc14-15上运行的客户端进行配合,以针对服务端11(或服务器13)上的接口实例库进行维护。
pc14-15只是用户可以使用的一种类型的电子设备。实际上,用户显然还可以使用诸如下述类型的电子设备:平板设备、笔记本电脑、掌上电脑(pdas,personaldigitalassistants)、可穿戴设备(如智能眼镜、智能手表等)等,本说明书一个或多个实施例并不对此进行限制。在运行过程中,该电子设备可以运行某一应用的客户端侧的程序,以实现该应用的客户端,并控制服务端对接口实例库进行维护。
而对于pc14-15与服务器11、13之间进行交互的网络12,可以包括多种类型的有线或无线网络。在一实施例中,该网络12可以包括公共交换电话网络(publicswitchedtelephonenetwork,pstn)和因特网。同时,pc14-15等电子设备之间,以及服务器11与服务器13也可以通过该网络12进行通讯交互。
请参见图2,图2是一示例性实施例提供的一种接口实例库的维护方法的流程图。如图2所示,该方法应用于服务器中,可以包括以下步骤:
步骤202,获取接口对应的待验证实例。
在本实施例中,应用之间通过调用接口来互相提供服务,而在调用接口时则会产生实例,该实例可能是历史调用过程中出现过的正常实例,也可能是新出现的处于未知状态的实例。例如,当业务场景发生变化时,将引起出现一批新的实例(即处于未知状态,未被标记为正常状态的实例)。具体的,比如,当发生规则变更、开关变更等现场变更时(即用户在变更系统中修改了规则或开关时),变更系统会将修改结果推送至相关的交易和支付节点,那么在实施相关业务时则会出现一些新的实例。又如,当某一系统调用下游系统超时时,也将导致出现一些新的实例。因此,在调用接口而产生实例时,需要对产生的实例进行验证以确定该实例的状态,从而可在实时监控分析接口的异常时将其作为依据。
步骤204,当所述接口对应的接口实例库中存在与所述待验证实例相匹配且被标记为正常状态的历史实例时,对所述历史实例的最近出现时刻进行更新。
在本实施例中,接口实例库用于存储调用接口产生的实例,并标记有各个实例的状态(包括正常状态、未知状态等)、最近出现时刻、最近修改时刻等信息。而当接口实例库中存在与待验证实例相匹配且被标记为正常状态的历史实例时,说明该待验证实例为历史过程中曾经出现过且被标记为正常状态的实例,而在当前过程中又再次出现了同一实例(即该待验证实例为该历史实例)。那么,将接口实例库中的该历史实例的最近出现时刻进行更新即可。而在对最近出现时刻进行更新时,可将最近出现时刻更新为执行该更新操作的时刻,也可将最近出现时刻更新为产生待验证实例的时刻;当然,本说明书一个或多个实施例并不对此进行限制。
步骤206,当不存在与所述待验证实例相匹配的历史实例时,将所述待验证实例添加至所述接口实例库中,且所述待验证实例被标记为未知状态。
在本实施例中,当接口实例库中不存在与待验证实例相匹配的历史实例时,说明该待验证实例为历史过程中从未出现过。那么,可将该待验证实例添加至接口实例库中,并且将该待验证实例标记为未知状态,以供后续流程进行进一步的确认。
在本实施例中,可针对接口实例库中记录的实例配置“老化机制”,以对接口实例库中的过期实例进行清理。比如,当所述接口实例库中任一历史实例的最近出现时刻在有效时间段之外时,所述任一历史实例被删除。通过上述“老化机制”的实施,使得接口实例库中仅保存未过期的实例。
在本实施例中,由于接口实例库存储的数据量极大,若在验证待验证实例(即上述步骤204-206的过程)时再在接口实例库中捞取数据来查找与待验证实例相匹配的历史实例,则将造成巨大的查询压力,并将导致存在耗时阻塞风险。针对上述隐患,可通过配置实例库缓存以解决上述问题。作为一示例性实施例,所述接口实例库中所有被标记为正常状态的历史实例均在实例库缓存初始化时被添加至所述实例库缓存中。换言之,在实例库缓存初始化时,从接口实例库中查询出所有被标记为正常状态的历史实例,并添加至实例库缓存中。那么,便可在实例库缓存中查找与待验证实例相匹配且被标记为正常状态的历史实例。可见,通过上述“缓存机制”来对接口实例库中被标记为正常状态的历史实例进行缓存,可提高上述验证过程的效率。
进一步的,可采用增量更新和全量更新相结合的方式来保证接口实例库中所有被标记为正常状态的历史实例被及时地添加至实例库缓存中。作为一示例性实施例,在每个增量周期内所述接口实例库中新修改的历史实例被添加至所述实例库缓存中(以下简称为增量更新),所述接口实例库中所有被标记为正常状态的历史实例均被按照全量周期更新至所述实例库缓存中(以下简称为全量更新)。其中,所述全量周期的时长大于所述增量周期的时长。
举例而言,可将增量周期设定为分钟级别,比如为1分钟;将全量周期设定为小时级别,比如为1小时。那么,按照1分钟的增量周期将接口实例库中在当前增量周期内被修改(状态被修改)的历史实例添加至实例库缓存中;按照1小时的全量周期将接口实例库中所有被标记为正常状态的历史实例添加至实例库缓存中。可见,通过按照增量周期和全量周期来更新实例库缓存,可以保证实例库缓存所存储数据的时效性和有效性。
在本实施例中,在通过上述“缓存机制”对接口实例库中被标记为正常状态的历史实例进行缓存时,可采用布隆过滤器存储实例,通过将布隆过滤器(优点是空间效率和查询时间都远远超过一般的算法)作为缓存实例的载体,可提高对存储空间的利用率;同时,在对待验证实例进行验证时,可提高查询效率。另外,基于上述针对接口实例库配置“老化机制”以及针对实例库缓存进行全量更新的方式,在将接口实例库中过期的实例进行清理的基础上,若进一步实施对实例库缓存进行全量更新的操作,则需要删除实例库缓存中的部分实例(即被清理的过期实例)。而考虑到布隆过滤器存在删除困难的问题,可通过以下方式来避免删除布隆过滤器中已添加数据的问题:当按照所述全量周期更新所述实例库缓存时,所述接口实例库中所有被标记为正常状态的历史实例存储于新创建的布隆过滤器中。换言之,当需要对实例库缓存进行全量更新时,可新创建布隆过滤器来存储实例库缓存需记录的实例;同时,可将之前(即对实例库缓存进行全量更新前)所采用的布隆过滤器删除。
在本实施例中,针对待验证实例为新出现实例的情况(即上述步骤206中待验证实例被标记为未知状态的情况),当由用户人工判断出该新出现的实例为正常实例时,用户可通过客户端向服务器下发第一状态修改请求以对该新出现的实例的状态进行修改。或者,服务器根据针对接口所对应实例的预期变化来判断该新出现的实例是否为正常实例。因此,服务器可在接收到针对所述待验证实例的第一状态修改请求,或者所述待验证实例的相关业务符合预期变化时,将所述待验证实例的最近修改时刻修改为执行该修改操作的时刻,并将所述待验证实例的状态由未知状态修改为正常状态。
在本实施例中,在获取待验证实例后,可将该待验证实例对应的接口参数作为索引存储至搜索引擎中。那么,当待验证实例为新出现实例,且由用户人工判断出该新出现的实例为正常实例时,用户可通过客户端向服务器下发第二状态修改请求以对该新出现的实例的状态进行修改。因此,当接收到针对该待验证实例的第二状态修改请求时,可根据该接口参数在搜索引擎中查找相应的实例(即查找到该待验证实例),并根据第二状态修改请求对该待验证实例的状态进行修改(由未知状态修改为正常状态)。通过上述将接口参数作为索引存储至搜索引擎的过程,可提高后续修改实例状态的效率。
为了便于理解,下面结合附图对本说明书的接口实例库的维护方案进行详细说明。
请参见图3,图3是一示例性实施例提供的另一种接口实例库的维护方法的流程图。如图3所示,该方法应用于服务器中,可以包括以下步骤:
步骤302,获取待验证实例。
在本实施例中,服务器可按照预设周期获取调用接口产生的待验证实例。进一步的,可将待验证实例对应的接口参数作为索引存储至搜索引擎中。以查询用户可用卡券为例,将实例x的场景信息(关键的接口参数的key-value键值对)存储至搜索引擎中。其中,key-value键值对包括:业务身份-order1001,销售产品码-mintrance,来源系统-无线收银台。那么,可将上述键值对作为索引存储至搜索引擎中,以供后续用户在对实例x进行打标时实现快速搜索(下文将详细描述)。
步骤304,在实例库缓存中查找与待验证实例相匹配且被标记为正常状态的历史实例。
在本实施例中,可配置实例库缓存来记录接口实例库中所有被标记为正常状态(normal)的历史实例。下面结合图4-5对接口实例库和实例库缓存进行详细说明。
请参见图4,图4是一示例性实施例提供的一种更新接口实例库的流程图。如图4所示,该方法应用于服务器中,可以包括以下步骤:
在步骤402中,查询接口实例库中历史实例的时间窗口大小。
在步骤404中,计算历史实例的有效时间段。
在本实施例中,可根据系统的当前时刻和历史实例的时间窗口大小,计算历史实例的有效时间段。其中,时间窗口大小可理解为有效时长。
举例而言,假定历史实例a的时间窗口大小为5min,当前时刻为12:00。那么,历史实例a的有效时间段为(12:00~12:05)。
在步骤406中,判断历史实例的最近出现时刻是否在有效时间段内,若在有效时间段内,则转入步骤408;否则,转入步骤410。
在步骤408中,保留该历史实例。
在步骤410中,删除该历史实例。
在本实施例中,承接于上述举例,在一种情况下,假定历史实例a的最近出现时刻为12:03,则历史实例a未过期,即保留接口实例库中的历史实例a。在另一种情况下,假定历史实例a的最近出现时刻为12:07,则历史实例a已过期,即需将历史实例a从接口实例库中删除。
请参见图5,图5是一示例性实施例提供的一种更新实例库缓存的流程图。如图5所示,该方法应用于服务器中,可以包括以下步骤:
在步骤502中,判断实例库缓存是否已初始化,若已初始化,则转入步骤504;否则,转入步骤506。
在本实施例中,由于接口实例库存储的数据量极大,若在验证待验证实例时再在接口实例库中捞取数据来查找与待验证实例相匹配的历史实例,则将造成巨大的查询压力,并将导致存在耗时阻塞风险。因此,可在实例库缓存初始化时,从接口实例库中查询出所有被标记为正常状态的历史实例,并添加至实例库缓存中。那么,在对待验证实例进行验证时,可直接在实例库缓存中查找与待验证实例相匹配且被标记为正常状态的历史实例。因此,通过对接口实例库中被标记为正常状态的历史实例进行缓存,可提高图3所示实施例中对待验证实例进行验证的效率。
在步骤504中,判断当前时刻是否为全量更新时刻,若是全量更新时刻,则转入步骤506;否则,转入步骤508。
在本实施例中,举例而言,假定增量周期为1min,全量周期为1h,且设定每个小时的第15分钟为全量更新时刻,即在全量更新时刻时执行全量更新的操作。那么,在一种情况下,当当前时刻为13:10时,执行增量更新的操作即可;在另一种情况下,当当前时刻为13:15时,执行全量更新的操作。
在步骤506中,对实例库缓存进行全量更新。
在本实施例中,当确定出需要对实例库缓存进行全量更新时,将接口实例库中所有被标记为正常状态的历史实例添加至实例库缓存中。而根据上述图4所示更新接口实例库的实施例可知,在更新接口实例库时所删除的实例,通过执行全量更新操作,可将该所删除的实例从实例库缓存中同步删除。可见,通过上述全量更新实例库缓存和更新接口实例库的方式,可实现实例库缓存中被标记为正常状态的实例与接口实例库中被标记为正常状态的实例同步保持一致。
在本实施例中,可采用布隆过滤器(优点是空间效率和查询时间都远远超过一般的算法)作为实例库缓存的存储载体,一方面可提高对存储空间的利用率,另一方面可在对待验证实例进行验证时提高查询效率。另外,基于上述针对接口实例库配置“老化机制”以及针对实例库缓存进行全量更新的方式,在将接口实例库中过期的实例进行清理的基础上,若进一步实施对实例库缓存进行全量更新的操作,则需要删除实例库缓存中的部分实例(即被清理的过期实例)。而考虑到布隆过滤器存在删除困难的问题,可新创建布隆过滤器作为实例库缓存的存储载体(弃用之前的布隆过滤器),从而可避免需要删除布隆过滤器中已添加数据的问题。
举例而言,假定在第1个全量周期内采用布隆过滤器a作为实例库缓存的存储载体来存储接口实例库中所有被标记为正常状态的历史实例。那么,在第2个全量周期内时,新创建布隆过滤器b来存储当前接口实例库中所有被标记为正常状态的历史实例,并且可以删除布隆过滤器a。
需要说明的是,在采用布隆过滤器作为实例库缓存的存储载体时,存储的是实例的结构md5。因此,在图3-7所示的实施例中,均以实例的结构md5进行说明。
在步骤508中,对实例库缓存进行增量更新。
在本实施例中,通过对实例库缓存进行增量更新,可使得接口实例库中在当前增量周期内新增的被标记为正常状态的历史实例被及时地添加至实例库缓存中,从而保证实例库缓存所存储数据的时效性和有效性。
步骤306,判断是否查找命中,若查找命中,则转入步骤308;否则,转入步骤310。
步骤308,将待验证实例添加至更新队列。
在本实施例中,当实例库缓存中存在与待验证实例相匹配且被标记为正常状态的历史实例时,说明该待验证实例为历史过程中曾经出现过且被标记为正常状态的实例,而在当前过程中又再次出现了同一实例(即该待验证实例为该历史实例)。因此,可将该待验证实例添加至更新队列。其中,更新队列中的实例均为被标记为正常状态的实例。那么,服务器可根据更新队列中记录的实例,将实例库中所对应的实例的最近出现时刻进行更新。而在对最近出现时刻进行更新时,可将最近出现时刻更新为执行该更新操作的时刻,也可将最近出现时刻更新为相应的实例的产生时刻;当然,本说明书一个或多个实施例并不对此进行限制。
步骤310,将待验证实例添加至插入队列。
在本实施例中,当实例库缓存中不存在与待验证实例相匹配的历史实例时,说明该待验证实例为历史过程中从未出现过。因此,可将该待验证实例添加至插入队列中。其中,插入队列用于记录当前预设周期(即获取待验证实例的预设周期)内新出现的实例(即未被标记为正常状态的实例)。那么,服务器可将插入队列中记录的实例批量添加至接口实例库中,并标记为未知状态(unknown)。
对于接口实例库中各历史实例的状态,可由用户通过客户端下发状态修改请求进行打标,或者由服务器根据预设的预期变化来判断实例是否处于正常状态。下面结合附图6-7进行详细说明。
请参见图6,图6是一示例性实施例提供的一种修改实例状态的流程图。如图6所示,该方法应用于服务器中,可以包括以下步骤:
步骤602,接收状态修改请求。
步骤604,在搜索引擎查找实例。
在本实施例中,可由用户人工判断新出现的实例是否为正常实例,用户可通过客户端向服务器下发状态修改请求(可以是第一状态修改请求,也可以是第二状态修改请求)来对该新出现的实例的状态进行修改。
举例而言,当服务器接收到状态修改请求时,根据相应实例(该状态修改请求所请求修改的实例)的场景信息在搜索引擎中查找该实例。承接于上述步骤302中的举例,可根据“业务身份-order1001,销售产品码-mintrance,来源系统-无线收银台”在搜索引擎快速查找到实例x。
步骤606,修改查找到的实例的最近修改时刻。
步骤608,修改查找到的实例的状态。
在本实施例中,承接于上述举例,通过修改实例x的最近修改时刻,以及将实例x由未知状态修改为正常状态,使得在对实例库缓存进行增量更新时,可及时将实例x添加至实例库缓存中。
请参见图7,图7是一示例性实施例提供的另一种修改实例状态的流程图。如图7所示,该方法应用于服务器中,可以包括以下步骤:
步骤702,获取被标记为未知状态的实例。
步骤704,判断获取到的实例是否符合预期变化,若符合,则转入步骤706;否则,返回步骤702。
在本实施例中,服务器可针对接口可能新出现的实例进行预测,从而配置预期变化。那么,可根据针对接口所对应实例的预期变化来判断获取到的实例(被标记为未知状态)是否为正常实例。因此,当获取到的实例符合预期变化(该实例所对应场景的业务变化符合预期变化)时,将该获取到的实例的最近修改时刻修改为执行该修改操作的时刻,并将其状态由未知状态修改为正常状态。
步骤706,修改获取到的实例的最近修改时刻。
步骤708,修改获取到的实例的状态。
在本实施例中,通过修改步骤702中获取到的实例的最近修改时刻,以及将该实例由未知状态修改为正常状态,使得在对实例库缓存进行增量更新时,可及时将该实例添加至实例库缓存中。
图8是一示例性实施例提供的一种设备的结构示意图。请参考图8,在硬件层面,该设备包括处理器802、内部总线804、网络接口806、内存808以及非易失性存储器810,当然还可能包括其他业务所需要的硬件。处理器802从非易失性存储器810中读取对应的计算机程序到内存808中然后运行,在逻辑层面上形成接口实例库的维护装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图9,在软件实施方式中,该接口实例库的维护装置可以包括:
获取单元901,获取接口对应的待验证实例;
更新单元902,当所述接口对应的接口实例库中存在与所述待验证实例相匹配且被标记为正常状态的历史实例时,对所述历史实例的最近出现时刻进行更新;
标记单元903,当不存在与所述待验证实例相匹配的历史实例时,将所述待验证实例添加至所述接口实例库中,且所述待验证实例被标记为未知状态。
可选的,当所述接口实例库中任一历史实例的最近出现时刻在有效时间段之外时,所述任一历史实例被删除。
可选的,所述接口实例库中所有被标记为正常状态的历史实例均在实例库缓存初始化时被添加至所述实例库缓存中;所述装置还包括:
查找单元904,在所述实例库缓存中查找与所述待验证实例相匹配且被标记为正常状态的历史实例。
可选的,在每个增量周期内所述接口实例库中新修改的历史实例被添加至所述实例库缓存中,所述接口实例库中所有被标记为正常状态的历史实例均被按照全量周期更新至所述实例库缓存中,所述全量周期的时长大于所述增量周期的时长。
可选的,所述实例库缓存采用布隆过滤器存储实例;当按照所述全量周期更新所述实例库缓存时,所述接口实例库中所有被标记为正常状态的历史实例存储于新创建的布隆过滤器中。
可选的,还包括:
第一修改单元905,在接收到针对所述待验证实例的第一状态修改请求,或者所述待验证实例的相关业务符合预期变化时,将所述待验证实例的最近修改时刻修改为执行该修改操作的时刻,并将所述待验证实例的状态由未知状态修改为正常状态。
可选的,还包括:
存储单元906,将所述待验证实例对应的接口参数作为索引存储至搜索引擎中;
第二修改单元907,当接收到针对所述待验证实例的第二状态修改请求时,根据所述接口参数在所述搜索引擎中查找相应的实例,并根据所述第二状态修改请求对所述待验证实例的状态进行修改。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。