著录项信息
专利名称 | 一种海量时序数据的存储方法 |
申请号 | CN201310659810.3 | 申请日期 | 2013-12-09 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2014-02-26 | 公开/公告号 | CN103605805A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 冶金自动化研究设计院 | 申请人地址 | 北京市丰台区西四环南路72号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 冶金自动化研究设计院 | 当前权利人 | 冶金自动化研究设计院 |
发明人 | 朱寅;李勇;徐化岩;于立业;黄霜梅;余志刚;赵博;贾天云;梁青艳;王丽娜 |
代理机构 | 北京华谊知识产权代理有限公司 | 代理人 | 刘月娥 |
摘要
一种海量时序数据的存储方法,属于数据管理技术领域。采用设计精简的HBase主键,并根据不同类型时序数据的存储及访问特性对时序数据分类并设计存储机制:对于实时数据、大周期数据以及无周期数据,采用简单行存储,即一条时序数据对应一条HBase行记录,通过简单行存储实现快速插入及检索数据;对于历史数据,采用把某一时段内的历史时序数据存储为HBase的一条行记录的段存储机制,通过段存储实现快速、高吞吐性能的历史数据数据检索数。优点在于,解决了具有实时访问性能的海量时序数据存储问题。
1.一种海量时序数据的存储方法,其特征在于:工艺步骤:
(1)采用HBase集群来直接管理企业的时序数据,由HBase写数据到Hadoop分布式文件系统,最终由Hadoop归档数据到磁盘;外部用户通过访问HBase来读、写、删除时序数据;
(2)企业的每个需要存储的时序数据点均具有唯一Id,通过数据点Id定位具体的数据点并获取数据点名称信息,其中,Id为大于或等于0的长整型数据,这使得数据存储系统支持万亿级的数据点管理;
(3)数据增加和数据修改均是数据写的一种特殊形式,在HBase中均通过Put操作完成,把数据增加和数据修改均统一到数据写入操作;
在数据写入时,每个数据点的一条或多条时序记录成为HBase数据表的一条行记录;行记录包括行键rowkey和值部分;HBase数据表通过行键区分行记录;行键设计为比特串,具体为:数据点Id.toBytes+时间戳.toBytes,其中数据点Id在前,时间戳在后,它们一前一后把同一数据点的数据聚在一起,方便查询某一数据点在某一时段的数据;Id为长整型,最多占用8字节,且根据数据点Id的值大小来自动选取最短长度的比特流,小于256的Id只需用1个字节;时间戳精确到毫秒,也采用长整型表示,占用8个字节,行键最多占用16字节;
(4)具体哪个数据点的时序数据写入到哪张HBase数据表中,由平衡存储机制来控制;
通过平衡存储,实现在数据访问时把网络I/O和磁盘I/O分布到集群中多个机器上,提高总的网络吞吐量和磁盘吞吐量;通过为每个数据点定义一个启发知识来实现平衡存储;在读、写某一数据点的数据时,根据数据点的启发知识确定其HBase数据表;
(5)按照是否周期性的有数据,把时序数据点分为两类:周期性的,即数据点每隔指定时间就有一条时序数据;无周期的,即该数据点数据流的时间戳是没有周期性规律的;
按照周期数据点的周期大小,把周期性数据点分为小周期数据点和大周期数据点;其中,用于分类的周期阈值通过配置设定;
按照数据新旧,把小周期性数据点的具体时序数据分为两类:历史数据,指时间戳在某一时刻之前的数据;实时数据,指除历史数据以外的数据;历史数据和实时数据的分割时刻实际也是实时数据起始时刻;用户在访问周期性数据点时,访问某一时刻的实时数据,或者访问某一时段的历史数据;
实时数据起始时刻的计算公式为:
实时数据的起始时刻=当前段存储的开始时刻–段存储的时间区间大小*n,当前段存储的开始时刻=当前时刻–当前时刻%段存储的时间区间大小,段存储的时间区间大小=存储周期*存储的数据点个数;其中,n为大于0的整数;%为数学求模运算符。
2.根据权利要求1所述的方法,其特征在于:根据不同数据的存储及访问特性,设计存储机制如下:
a.实时数据的每一条时序数据记录为HBase的一条行记录,行键中的时间戳选取为时序数据的时间戳,此时,行键已经包含了数据点Id和时序数据的时间戳,行记录的值部分只需存储序列化为比特流的时序数据的值;
实时数据直接写入到HBase实时数据表中,实时数据表提供数据实时读写功能;在读取某数据点在某一时刻的实时数据时,根据数据点Id及读取数据的时刻确定HBase记录的行键,并由此直接检索到数据,最后反序列化得到数据;
b.对于历史数据数据,某一时段内的历史时序数据存储为HBase的一条行记录,行键的时间戳部分选取为时段的开始时间,通过增加一次IO的读取量,减少在读取时间区间数据时的IO次数;由于是周期数据,当把时序数据做有序存储时,行记录的值部分就只需存储时序数据的值,而时间戳经过推算得到;因此,行记录的值部分设计为比特串,比特串中存放时序数据值序列化得到的比特流,并根据时序数据的时间戳及时段的开始时间确定时序数据值的存储位置;对于数据缺失的情况,在比特串的指定位置填充序列化为比特流的Double.NaN;其中,Double.NaN表示不是数字(NaN)的值,在java、C#语言中均有支持;
在写入某一历史时序数据时,先把那一时刻所在时段的段存储记录读出来,之后进行更新,最后再把段存储记录写回到历史数据表中;随着时间前进,实时数据表中的实时数据记录会慢慢地变为历史数据,需要把实时数据表中已变为历史数据的记录迁移到采用段存储的历史数据表中;通过确保相应段存储的时间区间完全覆盖,来构造新的段存储记录并写到历史数据表,从而避免读历史数据表段记录、更新段记录、再写回段记录的复杂操作;
实时数据表具有了数据缓冲的功能,通过周期性的遍历小周期数据点列表,计算、查找变为了历史数据的时序记录,并批量迁移查到的历史数据到历史数据表中。
一种海量时序数据的存储方法\n技术领域\n[0001] 本发明属于数据管理技术领域,特别涉及一种海量时序数据的存储方法。\n背景技术\n[0002] 时序数据是一种具有时间属性和值属性的数据。时序数据的时间属性也称为该时序数据的时间戳。以流程工业为例,包括化工、冶金、建筑、电力等等,存在着海量的时序数据。这些时序数据具体有:仪表的计量数据,生产计划数据,成本核算数据等。对于大型流程工业企业,一般有几十个分厂或车间,有几十万点级的仪表计量,一年产生的时序数据的规模在TB级。面对如此大规模的数据,许多企业在建设信息系统时采用分而治之的策略:每个分厂或车间拥有自己的数据存储系统,而企业层面存储的数据主要是汇总后的数据。\n[0003] 在工业化与信息化深入融合的今天,许多企业要求进一步提高信息化水平,要求建立企业级的数据平台,即实现对企业各车间所有计量数据等时序数据的统一集中管理,并基于此解决当前车间级多个数据存储系统造成的数据孤岛、数出多源等问题,实现更好的生产管控。企业级的数据平台需要一个企业级数据存储系统。该存储系统需要具有良好地弹性可扩展能力,以支持日渐增大的数据存储规模,且具有快速访问性能,以满足数据报警、实时查询、曲线查看等实时应用需求。\n[0004] 当前,在流程工业面临着海量数据时序存储管理的困境时,互联网公司也在面临着海量数据管理的难题。以Hadoop、HBase等为代表的大数据技术为海量数据管理提供了一种解决方案,并为当前淘宝、百度、搜狐等许多互联网公司采用。Hadoop提供了一种可靠、可伸缩的分布式文件系统,HBase是一种高性能、面向列存储的分布式数据存储系统。在专利《一种基于Hadoop+Hbase的农业时序数据组织方法》(专利申请号:201210107915.3)中,采用Hadoop和HBase技术来存储管理具有时间顺序的农业经济技术数据。\n发明内容\n[0005] 本发明的目的是提供一种海量时序数据存储方法,以便建立具有海量时序数据存储能力以及实时访问能力的企业级数据存储系统。该方法采用Hadoop和HBase作为底层存储支撑技术,利用它们的高扩展性以支持海量时序数据高性能存储管理,通过设计精简的HBase主键以及设计段存储进一步提升时序数据的读、写速度。其中,段存储定义为把同一数据点在某一时间的时序数据存储到一起。\n[0006] 本发明包括下列工艺步骤:\n[0007] (1)采用HBase集群来直接管理企业的时序数据,由HBase写数据到Hadoop分布式文件系统,最终由Hadoop归档数据到磁盘;外部用户通过访问HBase来读、写、删除时序数据。\n[0008] (2)企业的每个需要存储的时序数据点均具有唯一Id,通过数据点Id可定位具体的数据点并获取数据点名称等信息,其中,Id为大于或等于0的长整型数据,这使得数据存储系统可以支持万亿级的数据点管理。\n[0009] (3)数据增加和数据修改均是数据写的一种特殊形式,在HBase中均通过Put操作完成,因此,在本发明中,把数据增加和数据修改均统一到数据写入操作。\n[0010] 在数据写入时,每个数据点的一条或多条时序记录成为HBase数据表的一条行记录。行记录包括行键(rowkey)和值部分。HBase数据表通过行键区分行记录。合理的行键,可以起到数据索引作用,促成数据的快速检索。另外,对于海量数据,行键需要被存储上亿次,因此,行键也需要尽可能的短。为此,行键设计为比特串,具体为:数据点Id.toBytes+时间戳.toBytes,其中数据点Id在前,时间戳在后,它们一前一后的目的是为了把同一数据点的数据聚在一起,使得可以方便查询某一数据点在某一时段的数据。Id为长整型,最多占用8字节,且可以根据数据点Id的值大小来自动选取最短长度的比特流,例如小于256的Id只需用1个字节。时间戳精确到毫秒,也采用长整型表示,占用8个字节。因此,行键最多占用16字节。\n[0011] (4)具体哪个数据点的时序数据写入到哪张HBase数据表中,由平衡存储机制来控制。通过平衡存储,实现在数据访问时把网络I/O和磁盘I/O分布到集群中多个机器上,从而提高总的网络吞吐量和磁盘吞吐量。通过为每个数据点定义一个启发知识来实现平衡存储。在读、写某一数据点的数据时,可根据数据点的启发知识确定其HBase数据表。\n[0012] (5)按照是否周期性的有数据,把时序数据点分为两类:周期性的,即数据点每隔指定时间就有一条时序数据;无周期的,即该数据点数据流的时间戳是没有周期性规律的。\n[0013] 按照周期数据点的周期大小,把周期性数据点分为小周期数据点和大周期数据点;其中,用于分类的周期阈值通过配置设定。\n[0014] 按照数据新旧,把小周期性数据点的具体时序数据分为两类:历史数据,指时间戳在某一时刻之前的数据;实时数据,指除历史数据以外的数据。历史数据和实时数据的分割时刻实际也是实时数据起始时刻。用户在访问周期性数据点时,主要是访问某一时刻的实时数据,或者访问某一时段的历史数据。\n[0015] 根据不同数据的存储及访问特性,设计存储机制如下:\n[0016] a.实时数据的每一条时序数据记录为HBase的一条行记录。行键中的时间戳选取为时序数据的时间戳,此时,行键已经包含了数据点Id和时序数据的时间戳,因此,行记录的值部分只需存储序列化为比特流的时序数据的值。\n[0017] 实时数据直接写入到HBase实时数据表中。实时数据表提供数据实时读写功能。在读取某数据点在某一时刻的实时数据时,根据数据点Id及读取数据的时刻确定HBase记录的行键,并由此直接检索到数据,最后反序列化得到数据。\n[0018] b.对于历史数据数据,某一时段内的历史时序数据存储为HBase的一条行记录,行键的时间戳部分选取为时段的开始时间。通过增加一次IO的读取量,减少在读取时间区间数据时的IO次数。由于是周期数据,因此,当把时序数据做有序存储时,行记录的值部分就只需存储时序数据的值,而时间戳可以经过推算得到。因此,行记录的值部分设计为比特串,比特串中存放时序数据值序列化得到的比特流,并根据时序数据的时间戳及时段的开始时间确定时序数据值的存储位置。对于数据缺失的情况,在比特串的指定位置填充序列化为比特流的Double.NaN。其中,Double.NaN表示不是数字(NaN)的值,在java、C#等语言中均有支持。\n[0019] 在写入某一历史时序数据时,先把那一时刻所在时段的段存储记录读出来,之后进行更新,最后再把段存储记录写回到历史数据表中。随着时间前进,实时数据表中的实时数据记录会慢慢地变为历史数据,我们需要把实时数据表中已变为历史数据的记录迁移到采用段存储的历史数据表中。相比面向某个数据点的某一具体时序数据的迁移,面向某个数据点某一时段所有时序数据的迁移是更高效的,因为可以通过确保相应段存储的时间区间完全覆盖,来构造新的段存储记录并写到历史数据表,从而避免读历史数据表段记录、更新段记录、再写回段记录的复杂操作。此时,实时数据表具有了数据缓冲的功能,可以通过周期性的遍历小周期数据点列表,计算、查找变为了历史数据的时序记录,并批量迁移查到的历史数据到历史数据表中。\n[0020] 为此,具体定义实时数据起始时刻的计算公式为:\n[0021] 实时数据的起始时刻=当前段存储的开始时刻–段存储的时间区间大小*n[0022] 当前段存储的开始时刻=当前时刻–当前时刻%段存储的时间区间大小[0023] 段存储的时间区间大小=存储周期*存储的数据点个数\n[0024] 其中,n为大于0的整数;%为数学求模运算符。\n[0025] 在读取某一数据点在某一时间区间的历史数据时,根据所要读取的时间区间确定所在的时段,并进而结合数据点Id确定HBase记录的行键;随后,把相关的行记录读取出来;\n之后,对行记录进行解析及反序列化得到该区间的时序数据。\n[0026] c.对于大周期数据点,由于同一数据点的时序数据较为稀疏,因此,不再区分实时数据和历史数据,而是采用类似于周期性实时数据的存储方式,即一条时序数据对应一条HBase行记录。\n[0027] d.对于无周期数据点,数据频次不确定,不适宜于采用段存储,因此,直接采用类似于周期性实时数据的存储方式,即一条时序数据对应一条HBase行记录。\n[0028] 本发明的优点在于:\n[0029] (1)本发明是采用Hadoop和HBase等技术作为底层存储支撑,具有本质的海量数据管理能力,易于实施;\n[0030] (2)本发明采用平衡存储、段存储以及简单的数据结构能显著提高系统的吞吐能力和访问速度。\n附图说明\n[0031] 图1为时序数据点分类图。\n[0032] 图2为数据写入流程图。\n[0033] 图3为后台数据迁移流程图。\n[0034] 图4为数据读取流程图。\n[0035] 图5为数据删除流程图。\n具体实施方式\n[0036] 本发明提供了一种海量时序数据存储方法,其通过采用Hadoop和HBase作为底层存储支撑技术,利用它们的高扩展性以支持海量时序数据高性能存储管理,并通过设计精简的HBase主键以及设计段存储进一步提升时序数据的读、写性能。\n[0037] 该发明的实施主要包括两个阶段,具体有数据组织与存储、数据流动。下面结合流程图和实例来说明本发明的具体实施方式:\n[0038] (1)数据组织与存储\n[0039] 采用HBase集群来直接管理企业的时序数据,由HBase写数据到Hadoop分布式文件系统,最终由Hadoop归档数据到磁盘;外部用户通过访问HBase来读、写、删除时序数据。\n[0040] 所有时序数据点均具有唯一Id,该Id为大于或等于0的长整型数据。通过Id可定位、查询指定的数据点。\n[0041] 如图1所示,对时序数据点进行分类。按照是否周期性的有数据,把时序数据点分为周期数据点和无周期数据点。按照周期数据点的周期大小,把周期性数据点分为小周期数据点和大周期数据点;其中,用于分类的周期阈值通过配置设定,例如把周期阈值设定为\n3600秒,当数据点的周期小于3600秒时即为小周期数据点,当数据点的周期大于或等于\n3600秒时即为大周期数据点。按照数据新旧,把小周期性数据点的具体时序数据分为两类:\n历史数据,指时间戳在某一时刻之前的数据;实时数据,指除历史数据以外的数据。历史数据和实时数据的分割时刻实际也是实时数据起始时刻。\n[0042] 时序数据存储于HBase。根据数据的存储及访问特性,在HBase中为不同类型的数据创建不同的表,具体为:把实时数据存储于实时数据表中,把历史数据存储于历史数据表中,把大周期数据点的数据存储于大周期数据表中,把无周期数据点的数据存储于无周期数据表中。数据表是根据时序数据点的信息以及平衡存储机制动态创建的。\n[0043] 实时数据存储采用简单行存储,即一条时序数据存储为实时数据表中的一条行记录。实时数据表的表结构设计如下表所示。数据表的行键设计为比特串,最多占用16字节,具体为:id.toBytes+time.toBytes,其中,“id”为数据点id,“time”为时序数据的时间戳,“toBytes”表示序列化为比特串,“+”表示把后面的比特串添加到前面的比特串的末尾。数据表中只有一个列族,列族中只有一个数据列,该数据列存储的是时序数据值部分(value)序列化得到的比特串。\n[0044]\n[0045] 历史数据存储采用段存储,即某一时间区间内的历史时序数据存储为历史数据表中的一条行记录。历史数据表的表结构设计如下表所示。数据表的行键设计为比特串,最多占用16字节,具体为:id.toBytes+time.toBytes,其中,“time”为该时间区间的开始时间,“id”、“toBytes”以及“+”的意义与实时数据存储的相同。数据表中只有一个列族,列族中只有一个数据列,该数据列存储的是该时间区间所有时序数据值部分序列化得到的比特串按照时序数据时间戳大小依序拼接,其中,时序数据序列化得到的比特串均为固定长度。对于数据缺失的情况,在比特串的指定位置填充序列化为比特串的Double.NaN,Double.NaN表示不是数字(NaN)的值。\n[0046]\n[0047] 随着迁移,实时数据表中的数据记录逐渐地变为了历史数据,这些变为了历史数据的记录需要被迁移到历史数据表。实时数据表中的行记录和历史数据表中的行记录是多对一的关系,为了实现一次迁移能把简单行存储中同一数据点的多条行记录刚好聚集为段存储中的一条行记录,具体定义实时数据起始时刻的计算公式为:\n[0048] 实时数据的起始时刻=当前段存储的开始时刻–段存储的时间区间大小*n[0049] 当前段存储的开始时刻=当前时刻–当前时刻%段存储的时间区间大小[0050] 段存储的时间区间大小=存储周期*存储的数据点个数\n[0051] 其中,n为大于0的整数;%为数学求模运算符。\n[0052] 对于大周期数据点以及无周期数据点的数据存储,它们的表结构、行键、数据列设计为和上述实时数据存储一样的。\n[0053] 实时数据表、历史数据表、大周期数据表、无周期数据表均使用行的布隆过滤器,均设定数据版本数为1。根据相应类型数据点的规模以及平衡存储机制动态确定具体类型数据表的个数。例如,假设有100000个无周期数据点,每个无周期数据表存储20000个数据点的数据,那么需要创建5个无周期数据表;当无周期数据点的个数由100000变为160000个时,则需要增建3个无周期数据表。\n[0054] (2)数据流动\n[0055] 数据流动包括数据访问和后台数据迁移。数据访问指外部用户或应用对所存储时序数据的增、删、改、查,其中增和改可以统一到数据写,因此,本发明中,只把数据访问区分为数据写、数据读、数据删。后台数据迁移指已存储到HBase中的数据的再流动,具体的说就是写到实时数据表中的数据会逐渐地变为历史数据,由此,需要迁移这些数据到历史数据表进行段存储。\n[0056] 先说数据写操作。数据写操作的流程如图2所示。根据数据点的周期特性,把实时数据、历史数据、大周期数据、无周期数据分别存储到实时数据表、历史数据表、大周期数据表和无周期数据表。\n[0057] 对于实时数据,根据数据点Id和实时数据的时间戳得到HBase行键,一条数据记录对应一条HBase行记录。\n[0058] 对于历史数据:首先,根据数据点的存储周期和段存储的时间区间大小确定对应段存储时间区间的开始时间,再根据时间区间的开始时间以及数据点Id得到HBase行键;之后,从历史数据表中查询该行键对应的行记录;随后,对查询到的行记录进行解析,得到相应时间区间各时刻的具体时序数据;紧接着,根据要写入的时序数据和查询到的已写入的时序数据得到新的行记录;最后,把生成的行记录写入到历史数据表中。其中,段存储行记录的数据解析是:由行键解析出时间区间的开始时间;由数据列值以及时序数据值部分所序列化为比特串的固定宽度解析出各个时序数据的值;根据时序值在时序数据值部分的位置以及时间区间的开始时间,计算得到该时序值对应的时间戳,把值和时间戳结合得到具体的时序数据。\n[0059] 对于大周期和无周期数据,跟实时数据的一样,根据数据点Id和实时数据的时间戳得到HBase行键,一条数据记录对应一条HBase行记录。\n[0060] 再说数据读操作之前,先说后台数据迁移。数据迁移的流程如图3所示。在数据平台系统启动时,启动数据迁移任务,该任务之后会在系统后台一直运行着。数据迁移任务首先获知系统中都有哪些小周期数据点,之后,每隔一段时间一一遍历每个小周期数据点。在遍历时,对于每个小周期数据点,计算该数据点的实时数据起始时刻,紧接着读取实时数据表中已变为了历史数据的简单行存储记录;当读取到的记录不为空时,汇集这些记录为段存储记录,并写所生成的段存储记录到历史数据表中;当段存储记录成功写入到历史数据表后,从实时数据表中删除刚才所获取的行记录。\n[0061] 下面说数据读操作。数据读操作的流程图如图4所示。根据数据点Id获知数据的周期特性,并根据数据的周期特性判定数据是实时数据、历史数据、大周期数据还是无周期数据,由此,采用不同的方式到不同的数据表中进行读取。\n[0062] 对于实时数据,根据数据点Id和所要读取数据的时间戳得到HBase行键,并根据行键从实时数据表中检索相应的时序数据。\n[0063] 对应历史数据,首先需要根据数据点Id、存储周期以及所要读取数据的时间戳判定需要读取哪一个时间区间的段存储,并由相应段存储的开始时间以及数据点Id得到HBase段存储的行键。之后,根据行键从历史数据表中读取记录。当读取到的行记录不为空时,根据所要读取数据的时间戳以及该段存储的开始时间确定相应数据值在行记录值部分比特串的位置,并由此提取提取比特串,进而进行解析得到所要读取的时序数据的值部分。\n[0064] 对于大周期和无周期数据,跟实时数据的一样,根据数据点Id和所要读取数据的时间戳得到HBase行键,并根据行键从相应的数据表中检索相应的时序数据。\n[0065] 下面说数据删除操作。数据删除操作的流程图如图5所示。对于实时数据、大周期数据和小周期数据,根据所要删除数据的时间戳和数据点Id确定行键,并根据行键从相应的数据表删除对应的行记录。对于历史数据,如果是删除区间数据,则计算对应段存储的时间区间,判定是否会删除一个段存储完整时间区间的数据,如果是,则根据行键直接删除历史数据表中对应行记录;否则,计算段存储行键,从历史数据表中读取相应行记录;如果读取到的行记录不为空,则置行记录值部分的相应区段为序列化为比特串的Double.NaN,紧接着,判断该行记录值部分的所有数据均为Double.NaN,如果是,删除历史数据表中对应行记录,否则,把更新过的行记录写到历史数据表中。\n[0066] 以上所述仅为本发明的实施例,凡以本发明说明书及附图内容所作的均等变化与修饰,皆应属本发明专利的涵盖范围。
法律信息
- 2021-11-19
未缴年费专利权终止
IPC(主分类): G06F 17/30
专利号: ZL 201310659810.3
申请日: 2013.12.09
授权公告日: 2016.10.26
- 2016-10-26
- 2014-03-26
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201310659810.3
申请日: 2013.12.09
- 2014-02-26
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2012-09-12
|
2012-04-10
| | |
2
| |
2012-09-19
|
2012-04-29
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |