发明内容
本发明的目的在于揭示一种InfluxDB数据备份方法、InfluxDB数据备份系统及一种终端设备,用以降低备份操作过程中对支持InfluxDB运行的资源争夺风险,减少对资源的占用,并实现在数据备份过程中出现备份失败时的断点备份功能。
为实现上述第一个发明目的,本发明提供了一种InfluxDB数据备份方法,包括:
接收外部指令并加载初始化配置信息;
使用初始化配置信息自资源库中拉取资源,判断对资源库中资源的占用率并结合所述初始化配置信息对读操作模块及写操作模块下发执行指令;
读操作模块向InfluxDB发起数据备份请求,并从InfluxDB中拉取与备份请求对应的备份数据;
写操作模块将备份数据所形成的执行信息以日志文件形式写入数据库。
作为本发明的进一步改进,所述初始化配置信息包括:
访问地址、用户名、密码、本地备份地址、读速率、写速率、备份操作别名、待备份数据库名称、自动读写设置、待删除表及备份记录文件。
作为本发明的进一步改进,所述方法还包括:
判断自动读写设置是否有效,
若是,将所述初始化配置中配置的读速率与写速率分别加载至读操作模块与写操作模块,以确定从InfluxDB读取备份数据的读取速率,以及将备份数据写入缓存模块的写入速率;
若否,不对从InfluxDB读取备份数据的读取速率以及将备份数据写入缓存模块的写入速率予以限定。
作为本发明的进一步改进,所述方法还包括:
判断自InfluxDB中拉取的数据是否存在待删除表所对应数据,
若是,终止进程;
若否,读操作模块将自InfluxDB中拉取的备份数据写入缓存模块;
所述读操作模块自InfluxDB中拉取的备份数据的速率受控于资源控制模块。
作为本发明的进一步改进,所述方法还包括:
判断备份记录文件是否为空,
若是,将待删除表认定为有效,并终止进程;
若否,对备份记录文件中所关联的时序数据执行备份操作。
作为本发明的进一步改进,
所述读操作模块接收资源的占用率,将从InfluxDB中拉取的备份数据绑定执行信息,以将所述执行信息写入日志文件;
所述读操作模块将所述备份数据写入缓存模块,由所述写操作模块根据本地备份地址确定是否将备份操作别名写入备份数据。
作为本发明的进一步改进,所述资源的占用率为加载初始化配置信息所对应的单次数据备份操作对资源库中资源的占用比例;
所述资源由CPU、内存、磁盘IO、磁盘空间或者交换分区空间中的一种或者几种组成。
作为本发明的进一步改进,由所述写操作模块根据本地备份地址确定是否将备份操作别名写入备份数据具体为:
写操作模块判断本地备份地址是否存在与备份操作所对应的备份操作别名的文件;
若存在,写操作模块调用缓存模块中临时保存的备份数据;
若不存在,写操作模块创建与备份操作所对应的备份操作别名的文件,然后将备份数据写入被创建的备份操作别名的文件中。
作为本发明的进一步改进,所述执行信息包括:
备份信息表与备份过程表;
所述备份信息表由id字段、备份标签字段、length字段、表名字段、备份时间字段及最后备份时间字段组成;
所述备份过程表由表id字段、备份用时字段、限制条件字段、执行结果字段、备份次数字段及备份开始时间字段组成。
同时,基于相同发明思想,本发明还揭示了一种InfluxDB数据备份系统,包括:配置模块、资源控制模块、读操作模块、写操作模块及日志模块;
所述配置模块接收外部指令并加载初始化配置信息;
所述资源控制模块使用初始化配置信息自资源库中拉取资源,判断对资源库中资源的占用率并结合所述初始化配置信息对读操作模块及写操作模块下发执行指令;
所述读操作模块向InfluxDB发起数据备份请求,并从InfluxDB中拉取与备份请求对应的备份数据;
所述写操作模块将备份数据所形成的执行信息以日志文件形式写入数据库。
作为本发明的进一步改进,所述系统还包括:
至少一个存储装置及缓存模块;
所述存储装置保存从InfluxDB中拉取与备份请求对应的备份数据;
所述缓存模块保存由读操作模块临时写入的备份数据,并能够被写操作模块所调用。
作为本发明的进一步改进,所述初始化配置信息包括:访问地址、用户名、密码、本地备份地址、读速率、写速率、备份操作别名、待备份数据库名称、自动读写设置、待删除表及备份记录文件。
作为本发明的进一步改进,
所述配置模块判断自动读写设置是否有效,
若是,将所述初始化配置中配置的读速率与写速率分别加载至读操作模块与写操作模块,以确定从InfluxDB读取备份数据的读取速率,以及将备份数据写入缓存模块的写入速率;
若否,不对从InfluxDB读取备份数据的读取速率以及将备份数据写入缓存模块的写入速率予以限定。
作为本发明的进一步改进,
所述配置模块判断自InfluxDB中拉取的数据是否存在待删除表所对应数据,
若是,终止进程;
若否,读操作模块将自InfluxDB中拉取的备份数据写入缓存模块;
所述读操作模块自InfluxDB中拉取的备份数据的速率受控于资源控制模块。
作为本发明的进一步改进,
所述配置模块判断备份记录文件是否为空,
若是,将待删除表认定为有效,并终止进程;
若否,对备份记录文件中所关联的时序数据执行备份操作。
作为本发明的进一步改进,
所述读操作模块接收资源的占用率,将从InfluxDB中拉取的备份数据绑定执行信息,以将所述执行信息写入日志文件;
所述读操作模块将所述备份数据写入缓存模块,由所述写操作模块根据本地备份地址确定是否将备份操作别名写入备份数据。
作为本发明的进一步改进,所述资源的占用率为加载初始化配置信息所对应的单次数据备份操作对资源库中资源的占用比例;
所述资源由CPU、内存、磁盘IO、磁盘空间或者交换分区空间中的一种或者几种组成。
作为本发明的进一步改进,所述执行信息包括:
备份信息表与备份过程表;
所述备份信息表由id字段、备份标签字段、length字段、表名字段、备份时间字段及最后备份时间字段组成;
所述备份过程表由表id字段、备份用时字段、限制条件字段、执行结果字段、备份次数字段及备份开始时间字段组成。
最后,基于上述相同发明思想,本发明还揭示一种终端设备,其特征在于,包括:
处理器,存储器,以及在处理器与存储器之间建立通信连接的通信总线;所述处理器用于执行存储器中存储的一个或者多个程序,以实现如前述任一个发明创造所揭示的InfluxDB数据备份方法。
与现有技术相比,本发明的有益效果是:
通过本发明所揭示的一种InfluxDB数据备份的方法、装置及终端设备,解决有现有技术中InfluxDB数据备份过程中所存在的诸多缺陷,尤其能够通过对资源库中资源占用率的判断,并结合备份信息表与备份过程表降低了数据备份的操作粒度,且降低了对InfluxBD中时序数据在备份操作过程中对支持InfluxDB运行的各种资源的争夺风险,并减少了对资源不合理占用,同时也能够实现在数据备份过程中出现备份失败时的断点备份功能。
具体实施方式
下面结合附图所示的各实施方式对本发明进行详细说明,但应当说明的是,这些实施方式并非对本发明的限制,本领域普通技术人员根据这些实施方式所作的功能、方法、或者结构上的等效变换或替代,均属于本发明的保护范围之内。
术语“逻辑”包括用于执行任务的任何物理和有形功能。例如,流程图中所示的每个操作对应于用于执行该操作的逻辑组件。可以使用例如在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等、和/或其任何组合来执行操作。当由计算设备实现时,逻辑组件表示作为无论以何种方式实现的计算机系统的物理部分的电组件。
短语“配置为”或者短语“被配置为”包括可以构造任何种类的物理和有形的功能以执行标识的操作的任何方式。功能可以被配置为使用例如在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等、和/或其任何组合来执行操作。
术语“资源”可被理解为运行在计算机装置/系统中用以维持InfluxDB运行的计算机资源,此种计算机资源包括但不限于CPU资源、内存资源、I/O资源、存储资源等。
术语“备份数据”,其既包括一个完整备份操作中对InfluxDB实施备份操作所生成的备份数据,也包括从上次一次备份失败事件后重新执行断点备份所生成的备份数据,并与之前已经生成的备份数据共同组成与某个完整的备份操作所对应的备份数据;其中,所谓“上次一次备份失败事件”的原因可为服务器断电、备份操作进程失败、资源库中的一种或者几种资源无法响应备份操作或者人为误操作中的一种或者几种因素予以导致。
本申请旨在探究如何降低或者避免InfluxDB在备份操作过程中对InfluxDB的其他组件的正常运行造成影响,此种影响既包括对构成InfluxDB本身各种组件/插件/模块的不利影响,也包括减少或者避免对支持InfluxDB正常运行的各种资源所造成的不利影响。
下文通过多个实施例对本申请所包含的技术方案予以详细阐述。
实施例一:
本实施例揭示了一种InfluxDB数据备份方法(以下或简称“备份方法”或者“方 法”)的一种具体实施方式,其可通过图2所揭示的一种InfluxDB数据备份系统予以运行。
在本实施例中,该备份方法所备份的数据为InfluxDB200中的时序数据。本实施例所揭示备份方法可通过对InfluxDB200中需要执行备份操作的根据时间的先后顺序进行切分及断点备份,从而实现细粒度备份;同时,也根据资源池100中的一种或者几种资源的占用率进行合理限制,防止触发不同规格的备份操作的外部指令对资源的不合理占用,以降低对InfluxBD200中时序数据在备份操作过程中对支持InfluxDB200运行的各种资源的争夺风险。
结合图1与图2所示,该本实施例所揭示的一种InfluxDB数据备份方法,包括以下步骤S1至步骤S4。
步骤S1、接收外部指令并加载初始化配置信息;其中,外部指令可基于用户1以计算机可执行指令或者代码形式下发至配置模块10。该初始化配置信息包括:访问地址(db_addr)、用户名(db_username)、密码(db_password)、本地备份地址(db_store_path)、读速率(read_rate)、写速率(write_rate)、备份操作别名(tagname)、待备份数据库名称(dbname)、自动读写设置(auto_rw_rate)、待删除表(drop_table)及备份记录文件(need_table)。配置模块10将初始化配置信息下发至资源控制模块60,并由资源控制模块60将初始化配置信息中的部分内容下发至读操作模块30及写操作模块40。读速率(read_rate)是指读操作模块30向InfluxDB200发送拉取待备份数据的请求频率。写速率(write_rate)是指读操作模块30将自InfluxDB200拉取的待备份数据写入缓存模块50的速率。自动读写设置(auto_rw_rate)可为False或者True,并根据该自动读写设置确定是否需要对读速率与写速率进行限制。同时,可通过图2中的资源控制模块60对资源库100中的各种资源的占用率进行实时检测的结果予以确定。
步骤S2、使用初始化配置信息自资源库100中拉取资源,判断对资源库100中资源的占用率并结合所述初始化配置信息对读操作模块30及写操作模块40下发执行指令。
在本实施例中,资源控制模块60对资源库100中的各种资源进行实时侦测,以确定各种资源的实时占用状态。资源的占用率为加载初始化配置信息所对应的单次数据备份操作对资源库中资源的占用比例,由此记录单次数据备份操作所需要的各种资源的消耗,从而为单次数据备份操作所需要的资源予以合理分配,尽量避免单次数据备份操作所需要的资源与前一次后数据备份操作和/或后一次数据备份操作所需要的资源发生冲突,以实现合理配置资源的目的。在本实施例中,资源库100中的资源由CPU、内存、磁盘IO、磁盘空间或者交换分区空间(SWAP分区)中的一种或者几种组成。
结合图1所示,在步骤S2中,对资源库100中的资源执行侦测与拉取操作由资源控制模块60执行。配置模块10接收用户1下发的备份请求,将初始化配置信息下发至资源控制模块60,并由资源控制模块60下发访问信息至读操作模块30与写操作模块40。访问信息是基于备份请求由用户1下发至配置模块中初始化配置信息的一种或者几种。
结合图5所示,该方法还包括由配置模块10所执行的下述步骤。
步骤301、开始。
步骤302、接收初始化配置信息。
步骤303、配置模块10判断自动读写设置是否有效;
若是(即auto_rw_rate为无效,False),执行步骤304、继续加载包含写速率和读速率的初始化配置信息,将所述初始化配置中配置的读速率(read_rate)与写速率(write_rate)分别加载至读操作模块30与写操作模块40,以确定从InfluxDB200读取备份数据的读取速率,以及将备份数据写入缓存模块50的写入速率;若否(即auto_rw_rate为有效,True),执行步骤305、不加载包含写速率和读速率的初始化配置信息,不对从InfluxDB200读取备份数据的读取速率以及将备份数据写入缓存模块50的写入速率予以限定。在本实施例中,从InfluxDB200读取备份数据通过写操作模块30写入缓存模块50的作用是:当读操作模块30执行写入缓存模块50的过程中数据量过大时,能够有效地缓解读操作模块30将数据写入缓存模块50的写入压力。
步骤304与步骤305条跳转执行步骤306、判断备份记录文件(need_table)是否为空;若是,将待删除表(drop_table)认定为有效,跳转执行步骤308、结束,并终止进程;若否,跳转执行步骤307、对备份记录文件(need_table)中所关联的时序数据执行备份操作。
步骤S3、读操作模块30向InfluxDB200发起数据备份请求,并从InfluxDB200中拉取与备份请求对应的备份数据。写操作模块40从缓存模块50中调用备份数据并保存至图1所示出的存储装置60中。于此同时,写操作模块50将备份操作所对应的执行信息210以日志文件的形式保存至日志模块20中。
步骤S4、写操作模块40将备份数据所形成的执行信息210以日志文件形式写入数据库21(即图2所示出的SQLite21)。
读操作模块30接收资源的占用率,将从InfluxDB200中拉取的备份数据绑定执行信息210,以将所述执行信息210写入日志文件。读操作模块30将所述备份数据写入缓存模块50,由所述写操作模块40根据本地备份地址(db_store_path)确定是否将备份操作别名写入备份数据。在本实施例中,将备份操作别名(tagname)写入备份数据,有利于从InfluxDB200中对具体的一个或者多个数据库在执行备份操作时的准确性与唯一性,即使发生备份中断事件,也能够通过备份操作别名指向指定且需要执行备份操作的数据库。同时,在本实施例中,该缓存模块50在实际应用场景中可为一种用户保存临时数据的临时存储装置,例如,数据库、JVM、SSD或者移动存储装置。步骤S4中的执行信息210写入日志文件的技术手段,并在保存日志文件的日志模块或者配置日志模块的SQLite21中为用户1提供了查询接口,用户1能够实施对日志文件的访问,从而查看构成备份信息表211的备份过程数据,以及查看构成备份过程表212中的备份执行数据,从而实现对某个具体的备份操作所形成的备份数据执行查询操作结果的技术效果。结合图2所示,当某一次备份操作成功后,经过一段时间,如果InfluxDB200中有新增加的数据且需要对新增加的数据执行备份操作,可通过存储装置60中所保存的上一次备份操作所对应的备份数据根据备份操作别名,以仅对新增加的数据(即增量数据)进行备份操作,从而简化了备份操作的执行步骤,降低了对实施例二所揭示的备份系统的计算开销。
由于备份信息表211包含备份时间字段(time)及最后备份时间字段(lasttime),备份过程表212包含备份开始时间字段(starttime),因此使得用户1能够实时且准确地知悉某一次具体的备份操作的执行情况,以及最后一次备份的数据保存的路径(通过db_store_path进行确定)及中止的原因。
具体的,在本实施例中,由写操作模块40根据本地备份地址确定是否将备份操作别名写入备份数据具体为:
写操作模块40判断本地备份地址是否存在与备份操作所对应的备份操作别名的文件;若存在,写操作模块40调用缓存模块50中临时保存的备份数据,并将上述缓存模块50中临时保存的备份数据写入备份操作别名的文件中;若不存在,写操作模块40创建与备份操作所对应的备份操作别名的文件,然后将备份数据(即写操作模块40从缓存模块50调用的临时保存的备份数据)写入被创建的备份操作别名的文件中。由于不同的备份操作具有不同的备份操作别名(tagname),因此对通过上述技术方案,能够使得增量备份操作所执行的后续的数据备份操作更为准确。
参图3与图4所示,在本实施例中,该执行信息210包括:备份信息表211与备份过程表212;其中,备份信息表211由id字段(id)、备份标签字段(tag)、length字段(length)、表名字段(measurements)、备份时间字段(time)及最后备份时间字段(lasttime)组成。备份过程表212由表id字段(bid)、备份用时字段(costtime)、限制条件字段(concorrent)、执行结果字段(result)、备份次数字段(num)及备份开始时间字段(starttime)组成。
优选的,结合图6所示,在本实施例中,该备份方法还包括:判断自InfluxDB200中拉取的数据是否存在待删除表所对应数据,若是,终止进程;若否,读操作模块30将自InfluxDB200中拉取的备份数据写入缓存模块50;读操作模块30自InfluxDB200中拉取的备份数据的速率受控于资源控制模块60。所谓“受控于资源控制模块60”是指读操作模块30在自InfluxDB200中拉取的备份数据的速率需要结合资源库100中的一种或者几种资源的占用率,以防止高并发的数据备份请求对资源的不合理占用。
下文中,申请人结合图6对配置模块、写操作模块及读操作模块所共同执行的备份过程予以整体描述。
步骤401、开始;
步骤402、判断自动读写设置是否有效,若无效(False),则跳转执行步骤403、检测资源使用状态,调整写速率与读速率,并根据资源库100中一种或者几种资源的占用率确定是否需要调整写速率与读速率及调整比例,此种调整既可以是上浮也可以是下浮,从而按照调整后的写速率与读速率拉取资源;若有效(True),则跳转执行步骤404、直接根据初始化配置信息中所包含的写速率及读速率拉取资源。
步骤405、读操作模块30获取访问信息并向InfluxDB200发起访问请求;
此时InfluxDB200向读操作模块30反馈基于访问请求的备份数据。
步骤406、判断InfluxDB返回的数据(即备份数据)是否存在待删除表所对应的数据,若是,则跳转执行步骤411、结束;若否则跳转执行步骤407。
步骤407、InfluxDB200向读操作模块30反馈数据,并由读操作模块30将反馈数据(即备份操作所对应的备份数据)写缓存模块50中。
步骤408、写操作模块40判断下发的本地备份地址是否存在与备份操作所对应的备份操作别名的文件,若是,则跳转执行步骤410,若否则跳转执行步骤409。
步骤410、调用缓存模块50中的数据并写入备份操作别名的文件中;
步骤409、创建新的备份操作别名文件,并写入从缓存模块50中调用的数据。
步骤410、调用缓存模块50中的数据并写入备份操作别名的文件中。
步骤409与步骤410中从缓存模块50中调用的数据是从InfluxDB200中基于备份操作所拉取的备份数据。
实施例二:
基于实施例一所揭示的InfluxDB数据备份方法所包含的相同发明思想,本实施例还揭示了一种InfluxDB数据备份系统(以下简称“备份系统”或者“系统”)的一种具体实施方式。
在本实施例中,该InfluxDB数据备份系统,包括:配置模块10、资源控制模块60、读操作模块30、写操作模块40、日志模块20、至少一个存储装置60及缓存模块50。
配置模块10接收外部指令并加载初始化配置信息。资源控制模块60使用初始化配置信息自资源库100中拉取资源,判断对资源库100中资源的占用率并结合所述初始化配置信息对读操作模块30及写操作模块40下发执行指令。读操作模块30向InfluxDB发起数据备份请求,并从InfluxDB200中拉取与备份请求对应的备份数据。写操作模块40将备份数据所形成的执行信息210以日志文件形式写入数据库21,该数据库21具体为SQLite。日志模块20运行于SQLite21中,并能够响应用户1发起的访问日志文件的请求,并向用户1反馈日志文件。同时,在本实施例中,日志模块20连接配置模块10,用户1也可通过该配置模块10对日志模块20执行查询备份操作的请求以及执行增量备份的请求。
在本实施例中,资源的占用率为加载初始化配置信息所对应的单次数据备份操作对资源库100中资源的占用比例,其中,资源由CPU、内存、磁盘IO、磁盘空间或者交换分区空间中的一种或者几种组成。所述执行信息210包括:备份信息表211与备份过程表212;其中备份信息表211由id字段(id)、备份标签字段(tag)、length字段(length)、表名字段(measurements)、备份时间字段(time)及最后备份时间字段(lasttime)组成。备份过程表212由表id字段(bid)、备份用时字段(costtime)、限制条件字段(concorrent)、执行结果字段(result)、备份次数字段(num)及备份开始时间字段(starttime)组成。
存储装置60保存从InfluxDB200中拉取与备份请求对应的备份数据。缓存模块50保存由读操作模块30临时写入的备份数据,并能够被写操作模块40所调用。初始化配置信息包括:访问地址、用户名、密码、本地备份地址、读速率、写速率、备份操作别名、待备份数据库名称、自动读写设置、待删除表及备份记录文件。
配置模块10判断自动读写设置是否有效,
若是,将所述初始化配置中配置的读速率与写速率分别加载至读操作模块30与写操作模块40,以确定从InfluxDB200读取备份数据的读取速率,以及将备份数据写入缓存模块50的写入速率;
若否,不对从InfluxDB200读取备份数据的读取速率以及将备份数据写入缓存模块50的写入速率予以限定。
配置模块10判断自InfluxDB20中拉取的数据是否存在待删除表所对应数据,
若是,终止进程;
若否,读操作模块30将自InfluxDB200中拉取的备份数据写入缓存模块;
所述读操作模块30自InfluxDB200中拉取的备份数据的速率受控于资源控制模块60。
配置模块10判断备份记录文件是否为空,
若是,将待删除表认定为有效,并终止进程;
若否,对备份记录文件中所关联的时序数据执行备份操作。
读操作模块30接收资源的占用率,将从InfluxDB200中拉取的备份数据绑定执行信息210,以将所述执行信息210写入日志文件;
读操作模块30将所述备份数据写入缓存模块50,由所述写操作模块40根据本地备份地址确定是否将备份操作别名写入备份数据。
本实施例所揭示的一种InfluxDB数据备份系统运行如实施例一所示的InfluxDB数据备份方法所蕴含的相同的技术思想及技术方案。本实施例与实施例一中相同部分的技术方案,请参实施例一所述,在此不再赘述。
实施例三:
参图8所示,本实施例揭示了一种InfluxDB数据备份系统的一种变形实施例。本实施例所揭示的该InfluxDB数据备份系统与实施例二相比,其主要区别在于,在本实施例中,该备份系统中的写操作模块40同时挂载实施例二所示出的存储装置60以及辅助存储装置61。存储装置60保存基于该InfluxDB数据备份系统在执行备份操作过程中所从InfluxDB200中拉取的备份数据601,辅助存储装置61保存基于该InfluxDB数据备份系统在执行备份操作过程中所从InfluxDB200中拉取的备份数据611。同时,辅助存储装置61的数量可为一个或者多个。
存储装置60与辅助存储装置61在逻辑上既可以相互独立,以将辅助存储装置61作为存储装置60的对备份数据的存储能力的补充;当然,存储装置60与辅助存储装置61在逻辑上还可以互为冗余备份,以提高对备份数据的可靠性。存储装置60以及辅助存储装置61由多个易失性存储器或者多个非易失性存储器组成。
本实施例与实施例二中相同部分的技术方案,请参实施例二所述,在此不再赘述。
实施例四:
参图9所示,本实施例揭示了一种终端设备500的一种具体实施方式。
在本实施例中,该终端设备500,包括:处理器51,存储器52,以及在处理器51与存储器52之间建立通信连接的通信总线53。处理器51用于执行存储器52中存储的一个或者多个程序,以实现如实施例一所揭示的一种InfluxDB数据备份方法。具体的,在本实施例中,该存储器52可由多个易失性存储器或者多个非易失性存储器组成,例如图9中的存储器521至存储器52i,参数i取大于或者等于1的正整数。
同时,该终端设备500可被理解为通过上述组件(即处理器51,存储器52,以及配置在处理器51与存储器52之间建立通信连接的通信总线53)所配置出的具有物理态和/或虚拟态的计算机装置、计算机集群、虚拟机集群、数据中心或者分布式计算机集群等。处理器51可为中央处理器(CPU)、现场可编程门阵列(FPGA);专用集成电路(ASIC);应用特定的标准产品(ASSP);系统级芯片系统(SOC);复杂可编程逻辑器件(CPLD)等。
本实施例与实施例一至实施例三中任一个实施例中相同部分的技术方案,请参实施例一至实施例三所述,在此不再赘述。
上文所列出的一系列的详细说明仅仅是针对本发明的可行性实施方式的具体说明,它们并非用以限制本发明的保护范围,凡未脱离本发明技艺精神所作的等效实施方式或变更均应包含在本发明的保护范围之内。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。