一种向量数据库存储与检索方法与流程

文档序号:29207047发布日期:2022-03-12 01:54阅读:291来源:国知局
1.本发明涉及计算机与人工智能领域,具体涉及到分布式存储
技术领域
:,尤其涉及一种向量数据库存储与检索方法。
背景技术
::2.随着人工智能应用的普及,“向量相似度检索”作为一个最基本的服务,应用到越来越多的人工智能业务上。比如人脸识别,语音音识别,新闻推荐等。大部分的使用方式都是先用神经网络模型将图片,文本等变成特征向量,再选择一种距离计算方式(比如内积距离,余弦距离等)。这样,任意给定一个向量,就能找到与其距离相近的k个向量。我们把这种检索成为knn检索(knearestneighbours)。然而,虽然有各种各样的开源算法库用于knn检索,但大多都只停留在代码库的层面,工程师需要使用编程语言对其进行初始化与调用,这给工程师的使用上带来了一些问题。例如,多人对同一份数据的索引共享以及数据量过大的导致系统性能差的问题等。技术实现要素:3.针对现有技术的上述缺陷,本发明提供的一种向量数据库存储与检索方法,解决了上述技术问题,提供一种能够解决多人对同一份数据的索引共享以及数据量过大的导致系统性能差的问题的一种向量数据库存储与检索方法。4.为了达到上述目的,本发明提供如下技术方案:5.在本发明实施例的第一方面,首先提供了一种向量数据库存储与检索方法,方法包括:获取数据表,并将数据表水平切分,形成若干分片,其中,每个分片包括多个副本;6.获取数据,依据数据中所包含的键数据,进行第一次映射,键数据做hash得到一个整数,依据整数对若干分片求余,得到分片号,而后,再进行第二次映射,根据第一次映射和第二次映射为获取数据建立元数据服务器;其中,分片号用于表征分片,每个分片对应多个副本,并且,多个副本中包括一个主副本,每个副本对应一个向量存储引擎,依据分片号,获取主副本对应的向量存储引擎;7.基于获取到的一个主副本向量存储引擎,对其写入向量数据;8.基于获取到的主副本向量存储引擎,对其进行向量相似度检索。9.在一个可选的实施方式中,获取数据表,并将数据表水平切分,形成若干分片的步骤中,包括:10.元数据服务器包括若干数据服务器,基于raft协议在若干数据服务器中选取一个主服务器以及其他副服务器,主服务器与副服务器进行数据交互,以便主服务器与副服务器中元数据的一致性。11.在一个可选的实施方式中,获取数据,依据数据中所包含的链数据,进行第一次映射,键数据做hash得到一个整数,依据整数对若干分片求余,得到分片号,而后,再进行第二次映射,根据第一次映射和第二次映射为获取数据建立元数据服务器;其中,分片号用于表征分片,每个分片对应多个副本,并且,多个副本中包括一个主副本,每个副本对应一个向量存储引擎,依据分片号,获取主副本对应的向量存储引擎的步骤中,包括:12.将若干分片赋予数字,依据获取的整数与数字进行匹配,获得分片号,以便确定分片。13.在一个可选的实施方式中,基于获取到的一个主副本向量存储引擎,对其写入向量数据的步骤中,包括:14.数据还包括向量数据,每个副本对应一个数据服务器上的向量引擎;15.基于数据包括的向量数据和键数据,确定该数据对应一个具体数据服务器上的向量存储引擎。16.在一个可选的实施方式中,基于获取到的一个主副本向量存储引擎,对其写入向量数据的步骤后,包括:17.获取向量数据相似度的索引请求,对每个分片所包括的至少一个副本做索引,在索引的副本中选取相似度最高的预设数量的向量数据,再将索引到的预设数量的向量数据进行相似度排序,选取相似度最高的预设数量的向量数据输出。18.在一个可选的实施方式中,基于获取到的主副本向量存储引擎,对其进行向量相似度检索的步骤中,包括:19.依据获取数据,将向量数据使用浮点数数组表征,再将浮点数数组转化为二进制数据,并将二进制数据存储在键数据值存储引擎中,其中,键数据存储引擎用以键数据的索引;20.若索引数据,依据键数据在键数据值存储引擎中查询二进制数据,再将二进制数据转化为向量数据输出。21.在一个可选的实施方式中,获取数据表,并将数据表水平切分,形成若干分片,其中,每个分片包括多个副本的步骤中,数据表包括:22.内存表,置于内存中的表;23.固定内存表,置于磁盘中的表;其中,24.内存表数量达到第一预设阈值后,转为固定内存表,并对固定内存表中的向量数据建立向量存储引擎,向量存储引擎存储到磁盘上,生成第一索引文件;25.第一索引文件数量达到第二预设阈值时,将多个第一索引文件整合为第二索引文件。26.在本发明实施例的第二方面,还提供了一种向量数据库装置,装置包括:27.创建单元,用于获取数据表,并将数据表水平切分,形成若干分片,其中,每个分片包括多个副本;28.数据获取单元,用于获取数据,依据数据中所包含的键数据,进行第一次映射,键数据做hash得到一个整数,依据整数对若干分片求余,得到分片号,而后,再进行第二次映射,根据第一次映射和第二次映射为获取数据建立元数据服务器;其中,分片号用于表征分片,每个分片对应多个副本,并且,多个副本中包括一个主副本,每个副本对应一个向量存储引擎,依据分片号,获取主副本对应的向量存储引擎;29.写入向量数据单元,用于基于获取到的一个主副本向量存储引擎,对其写入向量数据;30.向量相似度检索单元,用于基于获取到的主副本向量存储引擎,对其进行向量相似度检索。31.在本发明实施例的第三方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的程序时,实现的方法步骤。32.在本发明实施例的第四方面,还提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现的方法。33.本发明实施例提供的技术方案,获取数据表,并将数据表水平切分,形成若干分片,在将获取的数据进行两次映射,以使得获取的数据存储在元数据服务器内,并对数据建立向量存储引擎,以便后续想要获取数据时可通过向量存储引擎快速查找,在检索的数据量,减少检索延时,检索准确率,系统性能,可靠性,易用性等指标上,均有显著提高。34.为了能更进一步了解本发明的特征以及技术内容,请参阅以下有关本发明的详细说明与附图,然而附图仅提供参考与说明用,并非用来对本发明加以限制。附图说明35.下面结合附图,通过对本发明的具体实施方式详细描述,将使本发明的技术方案及其它有益效果显而易见。36.图1是本发明一种向量数据库存储与检索方法的实施流程示意图。37.图2是本发明一种向量数据库存储与检索方法的整体架构示意图。38.图3是本发明一种向量数据库存储与检索方法的表水平切分后的示意图。39.图4是本发明一种向量数据库存储与检索方法的元数据两次映射示意图。40.图5是本发明一种向量数据库存储与检索方法的用户索引请求获取数据示意图。41.图6是本发明一种向量数据库存储与检索方法的系统扩容前示意图。42.图7是本发明一种向量数据库存储与检索方法的系统扩容后示意图。43.图8是本发明一种向量数据库存储与检索方法的系统缩容前示意图。44.图9是本发明一种向量数据库存储与检索方法的系统缩容后示意图。45.图10是本发明一种向量数据库存储与检索方法的主副本负载均衡前示意图。46.图11是本发明一种向量数据库存储与检索方法的主副本负载均衡后示意图。47.图12是本发明一种向量数据库存储与检索方法的故障数据恢复前示意图。48.图13是本发明一种向量数据库存储与检索方法的故障数据恢复后示意图。49.图14是本发明一种向量数据库存储与检索方法的向量存储引擎工作流程示意图。50.图15是本发明一种向量数据库存储与检索方法的向量存储引擎的工作示意图。51.图16是本发明一种向量数据库存储与检索方法的索引管理器的工作示意图。52.图17是本发明一种向量数据库存储与检索方法的加载插件式索引示意图。53.图18是本发明一种向量数据库存储与检索方法的向量数据写入示意图。54.图19是本发明一种向量数据库存储与检索方法的索引文件融合示意图。55.图20是本发明一种向量数据库存储与检索方法的相似度检索示意图。56.图21是本发明一种向量数据库存储与检索装置的结构示意图。57.图22是本发明一种电子设备的结构示意图。具体实施方式58.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。59.对本方案中的英文名词进行解释:60.raft,即replicatedandfaulttolerant的缩写,协议是工程上使用比较广泛的一致性,去中心化的,高可用的分布式协议。61.hash,称为散列、哈希,对应的英文为hash,原理就是把任意长度的输入,通过hash算法变成固定长度的输出。62.如图2所示,系统的元数据存储在元数据服务器中。一般的,元数据服务器多机部署。可采用3台元数据服务器构成一个组,组内通过raft协议保证元数据的可靠性与一致性。raft协议会选举出一个主服务器,其余从服务器与主服务器交互。在主服务器上设置多个接口开发库,例如,命令控制台接口开发库,网页控制台接口开发库和应用程序接口开发库,其中,命令控制台接口开发库,网页控制台接口开发库和/或应用程序接口开发库均可实现对元数据服务器进行数据的输入和调取,元数据用于管理整个集群的拓扑结构。拓扑结构具体可包括:表(table),分片片(partition),副本(replica)。对于大大型集群来说,还可以包括区(region),域(zone)。对于单机挂载多块存储盘的服务器来说,可以包括磁盘(disk)。63.如图1所示,本发明实施例提供了一种向量数据库存储与检索方法,方法包括如下步骤:64.s100:获取数据表,并将数据表水平切分,形成若干分片,其中,每个分片包括多个副本。65.其中,每个分片包括多个副本,分片(分片的英文全称为sharding)是将一个数据分成两个或多个较小的块。66.需要说明的是,数据表可由同类业务的数据所构成,将同类业务数据组成一个表,以便进行后续的元数据的存储和索引。67.如图3所示,将每个数据服务器划分为多个区域,每个区域再水平切分(水平切分的英文全称为horizontalpartitioning),划分为多个分片,水平切分数据库,可以降低单台机器的负载。68.通过raft协议对一个分片下,不同副本之间数据进行同步,以便保证不同副本数据的一致性。并且每个副本对应一个向量存储引擎,便于后续对数据的索引。69.需要说明的是,元数据服务器包括若干数据服务器,基于raft协议在若干数据服务器中选取一个主服务器以及其他副服务器,主服务器与副服务器进行数据交互,以便主服务器与副服务器中元数据的一致性。70.s200:获取数据,依据数据中所包含的键数据,进行第一次映射,键数据做hash得到一个整数,依据整数对若干分片求余,得到分片号,而后,再进行第二次映射,根据第一次映射和第二次映射为获取数据建立元数据服务器;其中,分片号用于表征分片,每个分片对应多个副本,并且,多个副本中包括一个主副本,每个副本对应一个向量存储引擎,依据分片号,获取主副本对应的向量存储引擎。71.其中,分片号用于表征分片,每个分片对应有一个分片号。72.需要说明的是,将若干分片赋予数字,依据获取的整数与数字进行匹配,获得分片号,以便确定分片。73.如图3所示,例如,分片号为由1至6,获取数据后,依据键做hash得到一个整数4,依据整数4得到图3中分片4,再进行第二次映射将数据映射在副本1、副本2和副本3中,以便进行依据映射关系进行数据的索引。74.s300:基于获取到的一个主副本向量存储引擎,对其写入向量数据。75.需要说明的是,对于任意一条数据(数据包括键数据和向量数据),经过两次映射最终得到元数据,元数据对应一个向量存储引擎,进而使得任一条数据都会对应一个具体数据服务器上的向量存储引擎。76.还需要说明的是,数据还可包括向量数据,每个副本对应一个数据服务器上的向量引擎,基于数据包括的向量数据和键数据,确定该数据对应一个具体数据服务器上的向量量存储引擎。77.如图4所示,每个分片基于raft,可以将分片所包括的三副本分为一个主副本和两个从副本,并且每个副本均对应有包向量存储引擎,以便副本数据的一致性和数据调用。78.s300步骤后还可以继续执行检索请求。79.s400:基于获取到的主副本向量存储引擎,对其进行向量相似度检索。80.需要说明的是,获取向量数据相似度的索引请求,对每个分片所包括的至少一个副本做索引,在索引的副本中选取相似度最高的预设数量的向量数据,再将索引到的预设数量的向量数据进行相似度排序,选取相似度最高的预设数量的向量数据输出。81.如图5所示,例如,在用户向元数据服务器请求数据时,对于向量相似度索引的请求时,可预设索引与给定向量相似度最高的前20个向量数据,系统会在表中所有分片中,分别选出一个副本做检索,每个副本都检索出相似度最高的前20个向量。最后再将索引结果汇总,依据相似度由高至低排序,取相似度最高高的前20个向量,作为最终结果返回用户,提高索引的准确率。82.如图6和图7所示,在工作当中,大量的向量数据插入时,可以均匀的分配到多个不同的服务器。每个服务器都不会过载,由此保证了元数据服务器的性能。多个副本之间运行raft协议,由此保证了数据一致性和可靠性。当集群数据量过大时,可以通过增加数据服务器的方式,实现扩容。系统会自动选择合适的副本数据,移动到新加入的数据服务器中。移动数据时,遵循raft协议,保证数据的一致性。可将这个过程称为系统扩容。83.如图8和图9所示,同样道理,当系统数据量过小时,可以通过缩容,下线机器留作他用,节省资源。系统会扫描要下线的机器,将上边所有副本,选择合适的目的地,移动过去。移动数据时,遵循raft协议,保证数据的一致性。可将这个过程称为系统缩容。84.如图10和图11所示,由于raft协议中存在一定的随机性,可能导致每台数据服务器上主副本个数不平均。为了保证数据的一致性,数据都会在主副本上执行写入操作。由此导致每台数据服务器上写入带宽不同,主副本数多的服务器,写入带宽可能过大,甚至被打满。这时,系统会在主副本多的服务器上,选择一部分主副本,将其降级为从副本,而在其他机器上,选举出新的主副本。最终,每台机器上主副本个数大致相同。避免了局部机器写带宽被打满的现象。再重新选主副本的过程中,遵循raft协议,保证数据的一致性。可将这个过程,称为主副本负载均衡。85.如图12和图13所示,当集群规模过大时,服务器或磁盘出现故障的概率也增大。当有服务器或磁盘出现故障时,系统会将故障硬件下线。同时扫描元数据,获取故障硬件上所有的副本。然后在其他正常服务器上,选择合适的位置,把故障硬件上的副本数据重新恢复出来。恢复数据的过程中,遵循raft协议,保证数据的一致性。把这个过程,称为故障数据恢复。86.在一个可选的实施方式中,s200步骤中,还可包括:87.s201:依据获取数据,将向量数据使用浮点数数组表征,再将浮点数数组转化为二进制数据,并将二进制数据存储在键数据值存储引擎中,其中,键数据存储引擎用以键数据的索引;88.若索引数据,依据键数据在键数据值存储引擎中查询二进制数据,再将二进制数据转化为向量数据输出。89.如图14所示,需要说明的是,向量数据使用浮点数组表示,利用浮点数组将向量数据转化为二进制,再利用常规的序列化工具将转化后二进制数据存入键值存储引擎。90.数据读取时,从键值存储引擎内,读取二进制数据,而后在将二进制数据反序列化为用于读取的向量数据。91.对于索引数据,只需将向量对象(向量对象包括向量数据和附加字段)对应的键数据存入内存,其他数据存放在磁盘上。当需要时,使用键数据向磁盘上存储的分片做随机查询。这样可以节省内存的使用量,还可以解决现有索引中,使用数据占用内存,导致内存不足的问题。92.写入存储引擎的是一个向量对象,里边除了包括向量数据本身之外,还包括一些附加字段。这些字段可以用来保存用户的附加数据。比如在人脸识别的场景中,用来保存原始图片的url(url即uniformresourcelocator,是因特网的万维网服务程序上用于指定信息位置的表示方法)。在做相似度检索后,除了拿到向量数据之外,同时还能拿到原图url。93.向量对象代码如下:94.messagevecobj{95.stringkey=1;96.vecvec=2;97.stringattach_value1=3;98.stringattach_value2=4;99.stringattach_value3=5;100.}101.messagevec{102.repeatedfloatdata=1;103.}104.如图15所示,向量存储引擎使用计算模块,对向量数据进行计算。计算模块可选用cpu处理器。105.图15中,存储模块,用于存储向量索引以及计算机模块,存储模块可以为磁盘。106.如图16所示,向量存储引擎使用索引管理器,管理向量索引,索引管理器用于管理索引的一种程序,索引管理器管理多个向量索引。通过索引管理器可以对向量索引进行查询、排序和筛选等操作。107.在向量索引集合中,既可以根据索引名字随机查询,也可以根据创建时间戳做排序。索引名字由向量存储引擎内部自动生成,全局唯一。用户可以根据索引名字,获得向量索引;还可以根据索引类型,时间戳筛选,获得向量索引;如果不给定名字和筛选条件,索引管理器将会返回最新的向量索引。108.索引名字可等于表名字加上分片编号加上副本编号加上索引类型加上当前时间戳获取。109.如图17所示,命令控制台接口开发库,网页控制台接口开发库和应用程序接口开发库等接口开发库在进行检索时由于使用的计算方法以及索引对象的不同,例如,随机深林,局部敏感哈希,聚类压缩等。每种算法,都有基于不同硬件计算实现的库,比如cpu和gpu。有开源的程序库,也有用户自己开发的程序库。需要建立统一的接口,在编程语言层面,它们继承自同一个接口类,内部做了不同的实现。以便不同的控制台能够通过统一的接口加载不同的动态库文件,实现了运行时加载插件式索引,当未来出现一种新的索引算法时,用户可以自己通过自己编写索引插件,将新的索引加载进向量存储引擎。110.接口的代码如下:111.classvecdt{112.public:113.booloperator<(constvecdt&rhs)const{114.returndistance_<rhs.distance_;115.}116.booloperator>(constvecdt&rhs)const{117.returndistance_>rhs.distance_;118.}119.private:120.std::stringkey_;121.floatdistance_;122.std::stringattach_value1_;123.std::stringattach_value2_;124.std::stringattach_value3_;125.};126.classvlndex{127.public:128.vlndex()=default;129.vlndex(constvlndex&)=delete;130.vlndex&operator=(constvlndex&)=delete;131.virtual~vlndex()=default;132.virtualstatusgetknn(conststd::string&key,intlimit,std::vector《vecdt》&r133.esults)=0;134.virtualstatusgetknn(conststd::vector《float》&vec,intlimit,std::vector<ve135.cdt>&results)=0;136.virtualstatusbuild()=0;137.virtualstatusload()=0;138.protected:139.intdim_;140.std::stringindex_type_;141.std::stringdistance_type_;142.std::stringreplica_name_;143.time_ttimestamp_;144.std::stringname_;145.std::stringpath_;146.};147.在一个可选的实施方式中,获取数据表,并将数据表水平切分,形成若干分片,其中,每个分片包括多个副本的步骤中,数据表包括:148.内存表,置于内存中的表;149.固定内存表,置于磁盘中的表;其中,150.内存表数量达到第一预设阈值后,转为固定内存表,并对固定内存表中的向量数据建立向量存储引擎,向量存储引擎存储到磁盘上,生成第一索引文件;151.第一索引文件数量达到第二预设阈值时,将多个第一索引文件整合为第二索引文件。152.需要说明的是,向量相似度检索一般使用过程是:将所有的向量灌入数据库,再建索引,然后再检索。这里有一个不便之处是,在建完索引之后,新加入的向量无法通过原有的索引检索出来。如果随着新加入向量后,马上再重新建索引,这样将会影响工作效率,做了重复计算。另外,过多的索引,严重占用了磁盘空间。本发明基于lsm-tree(全称logstructured-mergetree,是由两个或两个以上存储数据的结构组成的)的思想,创造了无感索引(无感索引英文全称transparentindex),也可称作透明索引。这样,用户再也不必手工建立索引,更不需要维护多个索引,删除过期索引等动作。只需要不断的插入向量即可。新插入的向量,即可就能被检索到。既简单,又节省计算量和磁盘空间。153.如图18所示,无感索引具体的可包括4个模块:154.内存表,向量数据插入向量存储引擎后,先存放在内存中。155.固定内存表,在内存表数量达到一定阈值后,将内存表转换为固定内存表,不在接受数据写入。156.索引文件,调度器在合适的时机,将固定内存表中的向量数据建索引,写入到磁盘上,生成索引文件。157.调度器,为台线程池,在预设的时间,将固定内存表转化成索引文件,并将多个索引文件融合成一个索引文件。158.向量数据占存在内存中,在预设的时间,将内存缓冲区中的向量数据写入磁盘,并对向量数据建立索引文件。对于后续新插入的向量数据,还会进入内存缓冲区。后台调度器的调度线程会依据设定自动选择在预设的时间,将缓冲区的向量数据,与磁盘上的索引文文件做融合。159.如图20所示,对于查询请求,例如,查询前k个相似的向量数据,系统会从内存表中查出k的相似向量,在磁盘的n个索引中也查出k*n个相似向量数据,然后将(n+1)k个向量数据做排序,选择前k个向量数据,返回给用户。其中,具体索引文件的个数,合并的条件,算法可根据实际运行情况做动态调整。160.与上述方法实施例相对应,本发明实施例还提供了一种向量数据库存储与检索装置,如图21所示,该装置可以包括:向量数据库创建单元201、数据获取单元202和数据检索创建单元203。161.向量数据库创建单元201,用于获取由元数据组成的表,并将表水平切分,形成若干分片,其中,每个分片包括多个副本;162.数据获取单元202,用于获取数据,依据数据中所包含的键数据,进行第一次映射,键数据做hash得到一个整数,依据整数对若干分片取模求余,得到分片号,而后,在进行第二次映射,依据分片号,获取分片号所对的多个副本;其中,分片号用于表征分片,每个分片对应有一个分片号;163.数据检索创建单元203,用于根据第一次映射和第二次映射为获取数据建立数据服务器上的向量存储引擎,其中,向量存储引擎用于对给定向量进行相似度检索。164.本发明实施例还提供了一种电子设备,如图22所示,包括处理器51、通信接口52、存储器53和通信总线54,其中,处理器51,通信接口52,存储器53通过通信总线54完成相互间的通信。165.存储器53,用于存放计算机程序;166.处理器51,用于执行存储器53上所存放的程序时,实现如下步骤:167.获取数据表,并将数据表水平切分,形成若干分片,其中,每个分片包括多个副本;获取数据,依据数据中所包含的键数据,进行第一次映射,键数据做hash得到一个整数,依据整数对若干分片求余,得到分片号,而后,再进行第二次映射,根据第一次映射和第二次映射为获取数据建立元数据服务器;其中,分片号用于表征分片,每个分片对应多个副本,并且,多个副本中包括一个主副本,每个副本对应一个向量存储引擎,依据分片号,获取主副本对应的向量存储引擎基于获取到的一个主副本向量存储引擎,对其写入向量数据;基于获取到的主副本向量存储引擎,对其进行向量相似度检索。168.上述电子设备提到的通信总线可以是外设部件互连标准(peripheralcomponentinterconnect,简称pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,简称eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。169.通信接口用于上述电子设备与其他设备之间的通信。170.存储器可以包括随机存取存储器(randomaccessmemory,简称ram),也可以包括非易失性存储器(non-volatilememory),例如多个磁盘存储器。可选的,存储器还可以是多个位于远离前述处理器的存储装置。171.上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,简称cpu)、网络处理器(networkprocessor,简称np)等;还可以是数字信号处理器(digitalsignalprocessing,简称dsp)、专用集成电路(applicationspecificintegratedcircuit,简称asic)、现场可编程门阵列(field-programmablegatearray,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。172.在本发明提供的又一实施例中,还提供了一种存储介质,该存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一的向量数据库存储与检索方法。173.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本发明实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在存储介质中,或者从一个存储介质向另一个存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。174.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。175.本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。176.以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1