CN113297309A - 流数据写入方法、装置、设备及存储介质 - Google Patents
流数据写入方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN113297309A CN113297309A CN202110610918.8A CN202110610918A CN113297309A CN 113297309 A CN113297309 A CN 113297309A CN 202110610918 A CN202110610918 A CN 202110610918A CN 113297309 A CN113297309 A CN 113297309A
- Authority
- CN
- China
- Prior art keywords
- data
- information
- stream data
- offset information
- written
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 68
- 238000005192 partition Methods 0.000 claims abstract description 83
- 238000012545 processing Methods 0.000 claims abstract description 32
- 230000008569 process Effects 0.000 claims abstract description 18
- 238000013500 data storage Methods 0.000 claims description 23
- 230000005012 migration Effects 0.000 claims description 18
- 238000013508 migration Methods 0.000 claims description 18
- 238000006243 chemical reaction Methods 0.000 claims description 17
- 238000004140 cleaning Methods 0.000 claims description 13
- 125000004122 cyclic group Chemical group 0.000 claims description 7
- 238000000605 extraction Methods 0.000 claims description 3
- 238000005201 scrubbing Methods 0.000 claims description 2
- 238000004891 communication Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000002688 persistence Effects 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/254—Extract, transform and load [ETL] procedures, e.g. ETL data flows in data warehouses
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/1727—Details of free space management performed by the file system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/214—Database migration support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24568—Data stream processing; Continuous queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及大数据处理技术领域,公开一种流数据写入方法、装置、设备及存储介质,该方法包括:在实时流数据处理进程启动时,从预设数据库表的分布式消息信息字段中提取当前偏移量信息,然后获取当前偏移量信息对应的数据分区信息,再根据数据分区信息从分布式消息订阅集群中获取待写入流数据,并将待写入流数据写入至分布式文件系统。由于本发明是从预设数据库表中获取当前偏移量信息,然后根据当前偏移量信息从分布式消息订阅集群中获取待写入流数据再进行的数据继续写入,相比于现有的引入其他的数据库组件来实现流数据的继续处理,本发明不需要使用额外的数据库组件,既保证了磁盘的安全性,也保证了数据写入的连贯性。
Description
技术领域
本发明涉及大数据处理技术领域,尤其涉及一种流数据写入方法、装置、设备及存储介质。
背景技术
在大数据领域,数据持久化存储在HDFS(分布式文件系统)是一种常见的解决方案,因为HDFS具有高容错性,适合批处理,有流式文件访问功能,可以在廉价的机器上搭建。由于数据来源有多样,比如从另外一个数据源(ORACLE,Mysql等)将数据批量导入到HDFS,在一些场景也有持续不断的数据需要做持久化处理,比如实时的日志分析,交易行情数据等。
在流式实时数据写入的场景,现有的解决方案或多或少都存在一些问题。比如采用分布式系统+流数据处理组件的解决方案。该解决方案将实时的数据写入分布式系统,然后将数据落地到磁盘,再通过分布式系统中的消息消费者来持续不断的读取数据,一旦流数据处理组件断开了和分布式系统的连接然后再次连接时,需要通过引入额外的数据库组件保证从上次断掉的地方继续进行数据处理,否则就会导致数据处理从头开始,额外的增加了对已经处理过的(无效)数据进行二次处理,极大的影响数据处理的效率,同时由于该方案会引入其他的数据库组件,也会使得磁盘安全性无法得到保障等。
上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
发明内容
本发明的主要目的在于提供了一种流数据写入方法、装置、设备及存储介质,旨在解决现有的流数据处理方式在参与数据处理的双方出现连接中断时,需要引入其他的数据库组件来实现流数据的继续处理,使得磁盘安全性无法得到保障的技术问题。
为实现上述目的,本发明提供了一种流数据写入方法,所述方法包括以下步骤:
在实时流数据处理进程启动时,从预设数据库表的分布式消息信息字段中提取当前偏移量信息;
获取所述当前偏移量信息对应的数据分区信息;
根据所述数据分区信息从分布式消息订阅集群中获取待写入流数据,并将所述待写入流数据写入至分布式文件系统。
优选地,所述获取所述当前偏移量信息对应的数据分区信息的步骤之前,所述方法还包括:
对分布式消息订阅集群的消息消费客户端进行初始化,并在初始化完后从所述分布式消息订阅集群中读取初始偏移量信息;
将所述初始偏移量信息与所述当前偏移量信息进行比对,并根据比对结果判断所述当前偏移量信息是否满足预设时间条件;
若满足,则执行所述获取所述当前偏移量信息对应的数据分区信息的步骤。
优选地,所述将所述初始偏移量信息与所述当前偏移量信息进行比对,并根据比对结果判断所述当前偏移量信息是否满足预设时间条件的步骤,包括:
判断所述当前偏移量信息对应的偏移量与所述初始偏移量对应的偏移量是否一致;
若一致,则判定所述当前偏移量信息满足预设时间条件;
若不一致,则判定所述当前偏移量信息不满足预设时间条件。
优选地,所述根据比对结果判断所述当前偏移量信息是否满足预设时间条件的步骤之后,所述方法还包括:
若不满足,则根据所述初始偏移量信息获取对应的数据分区信息;
根据所述数据分区信息对所述预设数据库表的分布式消息信息字段进行字段信息更新,并执行所述根据所述数据分区信息从分布式消息订阅集群中获取待写入流数据,并将所述待写入流数据写入至分布式文件系统的步骤。
优选地,所述根据所述数据分区信息从分布式消息订阅集群中获取待写入流数据,并将所述待写入流数据写入至分布式文件系统的步骤之后,所述方法还包括:
获取所述待写入流数据在写入所述分布式文件系统时对应的文件分区;
获取所述文件分区对应的剩余存储空间,并将所述剩余存储空间与预设空间阈值进行比较;
在所述剩余存储空间低于所述预设空间阈值时,对所述文件分区进行数据清理。
优选地,所述在所述剩余存储空间低于所述预设空间阈值时,对所述文件分区进行数据清理的步骤,包括:
在所述剩余存储空间低于所述预设空间阈值时,获取所述文件分区中存放的历史数据;
对所述历史数据对应的键对象进行遍历,并根据遍历结果确定相同键对象对应的偏移量集合;
从时间维度上对所述偏移量集合中的每个偏移量进行比对,并根据比对结果从所述偏移量集合中选取目标偏移量;
将所述所述偏移量集合中所述目标偏移量之外的其他偏移量对应的数据进行清除。
优选地,所述根据预设数据结构将所述待写入流数据写入至分布式文件系统的步骤之后,所述方法还包括:
获取所述分布式文件系统中待迁移数据对应的当前数据格式;
获取目标迁移数据库对应的数据存放格式,并比较所述当前数据格式与所述数据存放格式是否一致;
在所述当前数据格式和所述数据存放格式不一致时,根据所述数据存放格式对所述待迁移数据进行格式转换;
将格式转换后的待迁移数据发送至所述目标迁移数据库,以使所述目标迁移数据库利用循环冗余校验算法对所述待迁移数据进行一致性校验,并在校验通过时对所述待迁移数据进行储存。
此外,为实现上述目的,本发明还提出一种流数据写入装置,所述流数据写入装置包括:
信息提取模块,用于在实时流数据处理进程启动时,从预设数据库表的分布式消息信息字段中提取当前偏移量信息;
数据获取模块,用于获取所述当前偏移量信息对应的数据分区信息;
数据写入模块,用于根据所述数据分区信息从分布式消息订阅集群中获取待写入流数据,并将所述待写入流数据写入至分布式文件系统。
此外,为实现上述目的,本发明还提出一种流数据写入设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的流数据写入程序,所述流数据写入程序配置为实现如上文所述的流数据写入方法的步骤。
此外,为实现上述目的,本发明还提出一种存储介质,所述存储介质上存储有流数据写入程序,所述流数据写入程序被处理器执行时实现如上文所述的流数据写入方法的步骤。
本发明通过在实时流数据处理进程启动时,从预设数据库表的分布式消息信息字段中提取当前偏移量信息,然后获取当前偏移量信息对应的数据分区信息,再根据数据分区信息从分布式消息订阅集群中获取待写入流数据,并将待写入流数据写入至分布式文件系统。由于本发明是从本地获取当前偏移量信息,然后根据当前偏移量信息从分布式消息订阅集群中获取待写入流数据然后进行的数据继续写入,相比于现有的引入其他的数据库组件来实现流数据的继续处理,本发明不需要使用额外的数据库组件,既保证了磁盘的安全性,也保证了数据写入的连贯性。
附图说明
图1是本发明实施例方案涉及的硬件运行环境的流数据写入设备的结构示意图;
图2为本发明流数据写入方法第一实施例的流程示意图;
图3为本发明流数据写入方法第二实施例的流程示意图;
图4为本发明流数据写入方法第三实施例的流程示意图;
图5为本发明流数据写入装置第一实施例的结构框图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
参照图1,图1为本发明实施例方案涉及的硬件运行环境的流数据写入设备结构示意图。
如图1所示,该流数据写入设备可以包括:处理器1001,例如中央处理器(CentralProcessing Unit,CPU),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(WIreless-FIdelity,WI-FI)接口)。存储器1005可以是高速的随机存取存储器(RandomAccess Memory,RAM)存储器,也可以是稳定的非易失性存储器(Non-Volatile Memory,NVM),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的结构并不构成对流数据写入设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、数据存储模块、网络通信模块、用户接口模块以及流数据写入程序。
在图1所示的流数据写入设备中,网络接口1004主要用于与网络服务器进行数据通信;用户接口1003主要用于与用户进行数据交互;本发明流数据写入设备中的处理器1001、存储器1005可以设置在流数据写入设备中,所述流数据写入设备通过处理器1001调用存储器1005中存储的流数据写入程序,并执行本发明实施例提供的流数据写入方法。
本发明实施例提供了一种流数据写入方法,参照图2,图2为本发明流数据写入方法第一实施例的流程示意图。
本实施例中,所述流数据写入方法包括以下步骤:
步骤S10:在实时流数据处理进程启动时,从预设数据库表的分布式消息信息字段中提取当前偏移量信息;
需要说明的是,实现本实施例流数据写入方法的前提条件为:分布式订阅消息数据,即Kafka数据已加载至Kafka集群,实时流数据处理进程Spark Streaming已经部署至分布式文件系统HDFS,本实施例中实时流数据处理进程可通过上述预设数据库表(如HIVE表)进行Kafka数据管理。
为解决现有技术中存在的问题,本实施例在预设数据库表中新增一个kafka_info字段(即上述分布式消息信息字段),用来存储Kafka数据对应topic(主题)的partition(分区)信息和partition的offset(偏移量)信息。
应理解的是,本步骤中实时流数据处理进程Spark Streaming启动可以是初次启动,也可以是与Kafka集群断开连接后重新启动,本实施例对此不作限制。另外,本步骤中所述当前偏移量信息即预设数据库表中存放的最新的偏移量信息,也即最近一条offset信息。
步骤S20:获取所述当前偏移量信息对应的数据分区信息;
应理解的是,Kafka集群对于每一个topic都会维护这一个分区的log(日志),每一个分区都是一个顺序的、不可变的消息队列,并且可以持续的添加。分区中的消息都被分配了一个序列号,称之为偏移量(offset),在每个分区中此偏移量都是唯一的,Kafka集群能够保持所有的消息,直至它们过期。本步骤中,所述数据分区信息即待读取的数据在Kafka集群中所属的存放区域(partition)信息。
需要说明的是,基于上述预设数据库表进行Kafka数据的实时读取和写入时,实时流数据处理进程Spark Streaming本地的当前偏移量信息通常与Kafka集群中同一时刻的偏移量信息相同,因为流数据通常是实时写入Kafka,然后由Kafka落地到磁盘,SparkStreaming再持续不断的读取数据。但一旦Spark Streaming与Kafka集群断开连接后再重连,则可能会导致重连时刻Kafka集群中的偏移量信息与Spark Streaming中的当前偏移量信息不一致,此时若按照重连时刻Kafka集群中最新的偏移量信息来进行流数据的读取和写入,则会导致数据写入的不连贯,即重连后读取并写入的数据与之前断开连接前读取并写入的数据不连续,中间丢失了部分数据。
因此,本实施例中Spark Streaming在每一次启动后都先从本地存放的预设数据库表的分布式消息信息字段中提取当前偏移量信息,然后根据该当前偏移量信息从HIVE表中查询接下需要读取的流数据对应的数据分区信息,从而保证数据写入的连续性。
步骤S30:根据所述数据分区信息从分布式消息订阅集群中获取待写入流数据,并将所述待写入流数据写入至分布式文件系统;
需要说明的是,所述分布式文件系统可以是HDFS,即Hadoop分布式文件系统。
在具体实现中,在确定出待写入的数据对应的数据分区信息后,即可从中读取相应的数据分区标识(名称或编码),让根据该数据分别标识在分布式消息订阅集群的消息队列中查询对应的目标分区,再从该目标分区中读取待写入流数据,然后将待写入流数据写入至分布式文件系统。
本实施例通过在实时流数据处理进程启动时,从预设数据库表的分布式消息信息字段中提取当前偏移量信息,然后获取当前偏移量信息对应的数据分区信息,再根据数据分区信息从分布式消息订阅集群中获取待写入流数据,并将待写入流数据写入至分布式文件系统。由于本实施例是从本地获取当前偏移量信息,然后根据当前偏移量信息从分布式消息订阅集群中获取待写入流数据然后进行的数据继续写入,相比于现有的引入其他的数据库组件来实现流数据的继续处理,本实施例不需要使用额外的数据库组件,既保证了磁盘的安全性,也保证了数据写入的连贯性。
进一步地,考虑到Spark Streaming与Kafka集群断开连接后再重连时,存在重连时间间隔长短不一的问题,由于Kafka集群对数据的存储是有时间限制的,若重连时间过长,Spark Streaming本地存储的当前偏移量信息对应的数据在Kafka集群已经过期而被清除,此时已经无法保证流数据写入的连贯性,但为了保证重连时刻需要写入的流数据仍能顺利写入分布式文件系统,本实施例提供的流数据写入方法在所述步骤S20之前,还包括:
步骤S101:对分布式消息订阅集群的消息消费客户端进行初始化,并在初始化完后从所述分布式消息订阅集群中读取初始偏移量信息;
需要说明的是,所述初始偏移量信息可以是Kafka集群与Spark Streaming重连时刻或Kafka集群启动时刻,集群中等待当前消费者(即Spark Streaming)消费的最新流数据对应的偏移量信息。
步骤S102:将所述初始偏移量信息与所述当前偏移量信息进行比对,并根据比对结果判断所述当前偏移量信息是否满足预设时间条件;
步骤S103:若满足,则执行所述获取所述当前偏移量信息对应的数据分区信息的步骤。
应理解的是,Spark Streaming在启动时,将本地读取的当前偏移量信息和Kafka集群中最新流数据对应的偏移量信息进行对比即可判断出当前偏移量信息对应的流数据在Kafka集群中是否过期;若过期,则表明该数据已经不存在于Kafka集群,此时只能从Kafka集群中现存的最早的流数据开始读取并写入,从而尽可能的减少丢失的流数据;若未过期,则表明该数据仍然存在于Kafka集群,此时只需要根据当前偏移量信息接着读取对应的流数据然后进行写入即可。
需要说明的是,所述预设时间条件可以是初始偏移量信息与当前偏移量信息之间的时间间隔小于连接断开时刻到对应数据清除周期的周期截止时刻之间的时间间隔。例如连接断开的时刻为12:01(该时刻所对应的清除周期为12:00-12:10),重连的时刻为12:08,则初始偏移量信息与当前偏移量信息之间的时间间隔为8分钟小于12:01与12:10之间的时间间隔9分钟,此时即可直接获取当前偏移量信息对应的数据分区信息。
当然,考虑到不同场景的数据写入需求,为了在某些场景下保证数据写入的严格连贯和时效性,本实施例中上述步骤S102还可以包括:
步骤S1021:判断所述当前偏移量信息对应的偏移量与所述初始偏移量对应的偏移量是否一致;
步骤S1022:若一致,则判定所述当前偏移量信息满足预设时间条件;
步骤S1023:若不一致,则判定所述当前偏移量信息不满足预设时间条件。
需要说明的是,本实施方式中,上述预设时间条件可以是当前偏移量信息对应的偏移量与初始偏移量对应的偏移量是否一致。也就是说只有当偏移量一致时,才执行后续的数据写入操作,反之则执行其它操作。
进一步地,上述其它操作可以是在所述当前偏移量信息不满足预设时间条件时,据所述初始偏移量信息获取对应的数据分区信息;然后根据所述数据分区信息对所述预设数据库表的分布式消息信息字段进行字段信息更新,同时执行上述步骤S30。其中,该初始偏移量信息的确定方式也可以按照上述初始偏移量信息与当前偏移量信息之间的时间间隔是否小于连接断开时刻到对应数据清除周期的周期截止时刻之间的时间间隔来决定,若小于,则根据所述当前偏移量信息获取对应的数据分区信息,若大于,则根据所述初始偏移量信息(此时为Kafka集群中现存的最早的流数据对应的偏移量信息)获取对应的数据分区信息。
本实施例通过对分布式消息订阅集群的消息消费客户端进行初始化,并在初始化完后从分布式消息订阅集群中读取初始偏移量信息,然后将初始偏移量信息与当前偏移量信息进行比对,并根据比对结果判断当前偏移量信息是否满足预设时间条件;若满足,则获取所述当前偏移量信息对应的数据分区信息,然后进行后续数据读取和写入操作,能够尽可能的保证数据写入的连续性,即便无法保证严格连续,也能尽可能的减少数据的丢失。
参考图3,图3为本发明流数据写入方法第二实施例的流程示意图。
基于上述第一实施例,在本实施例中,所述步骤S30之后还包括:
步骤S40:获取所述待写入流数据在写入所述分布式文件系统时对应的文件分区;
应理解的是,由于Spark Streaming在处理每个批次的流数据时,会在HDFS中生成一个临时文件,临时文件在Spark Streaming运行过程中会一直存在,直到SparkStreaming停止。由于Spark Streaming是常驻进程,一般情况不会停止,因此这类临时文件数量日积月累也较为巨大。因此本实施例将定时清理HDFS中的临时文件,以减少NameNode管理负载。
可理解的是,Spark Streaming通过sparksql写数据到HDFS,由于HDFS不支持更新操作,所以每一次写都相当于新建一批文件(Spark分布式任务管理中数据会分区,每个分区都可以存放文件,所以一次写入可能会写多个文件)。
为了保证对流数据的顺利写入,同时尽可能的保证HDFS有充足的存储空间,本实施例将对分布式文件系统中的数据进行定期清理。具体的,可预先设置一个定时任务,在定时任务触发时,获取当前写入到分布式文件系统中的流数据对应的文件分区。
步骤S50:获取所述文件分区对应的剩余存储空间,并将所述剩余存储空间与预设空间阈值进行比较;
在具体实现中,确定文件分区后,即可获取该文件分区对应的剩余存储空间,然后将其与预先设定的空间阈值进行比较。本实施例中该预设空间阈值可以是预先设定的用于判断是否需要进行数据清理的参考值,若剩余存储空间小于该预设空间阈值,则表明文件分区内的数据过多,需要进行数据清理;反之,则无需进行数据清理。
步骤S60:在所述剩余存储空间低于所述预设空间阈值时,对所述文件分区进行数据清理。
在具体实现中,对文件分区进行数据清理的方式可以是对文件分区中数据存储时刻与进行数据清理的时刻之间的时间间隔超过预设时长的数据进行清除,也可以是对其中所有的历史数据进行全部清除或部分清除。本实施例对此不作具体限制。
进一步地,为了保证清理的数据为无效或者重复的数据,本实施例中所述步骤S60可进一步包括:
步骤S601:在所述剩余存储空间低于所述预设空间阈值时,获取所述文件分区中存放的历史数据;
需要说明的是,kafka集群的kafka数据存放时的数据结构通常如下表1所示:
Offset | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
Key | K1 | K2 | K1 | K3 | K2 | K4 | K5 |
Value | V1 | V2 | V3 | V4 | V5 | V6 | V7 |
表1
如表1所示,offset为偏移量,Key-Value为消息体,例如消息体中的Key为用户ID时,Value则可以为用户的资料。本步骤中历史数据可按照上述表1所示的数据结构存放在文件分区中。
步骤S602:对所述历史数据对应的键对象进行遍历,并根据遍历结果确定相同键对象对应的偏移量集合;
如上表1所示,Kafka数据在存储时虽然offset不会重复出现,但不同offset对应的Key则有可能重复,尽管这些重复的Key对应的Value不同。因此,可对这些相同的键对象对应的offset进行收集,获得偏移量集合,然后基于该偏移量集合进行数据清理。具体的,可采用轮询的方式对历史数据对应的键对象进行遍历,然后根据遍历结果确定相同键对象对应的偏移量集合,例如[offset:(0,2),(1,4)]。
步骤S603:从时间维度上对所述偏移量集合中的每个偏移量进行比对,并根据比对结果从所述偏移量集合中选取目标偏移量;
应理解的是,offset通常是以时间顺序进行编码,数值越小,表明存储的时间越久,对于重复的Key而言,最新的offset对应的Value中的数据一般是最新的,例如对于对用户而言,他们的用户ID通常是固定的,但Value中保存的用户资料可能是在不断变更的,因此更新之前的用户资料就可以删除,从而节省数据存储空间。
需要说明的是,所述目标偏移量即相同键对象对应的offset中最新的offset。所述时间维度即时间的先后顺序。
在具体实现中,可按照时间的先后顺序对偏移量集合中的每个偏移量进行比对,然后根据比对结果从中筛选出相同键对象对应的一个目标偏移量,例如相同键对象K1对应的offset:(0,2)中,根据时间维度选取的目标偏移量为offset:2,所以后续在进行数据清理时,需要保留的也是该目标偏移量对应的数据。
步骤S604:将所述所述偏移量集合中所述目标偏移量之外的其他偏移量对应的数据进行清除。
应理解的是,在确定出需要保存的数据所对应的目标偏移量后,即可对相同键对象对应的非目标偏移量,即除目标偏移量之外的其他偏移量所对应的数据进行清除。
按照上述方式对数据进行清理后,获得的数据即如下表2所示:
Offset | 2 | 3 | 4 | 5 | 6 |
Key | K1 | K3 | K2 | K4 | K5 |
Value | V3 | V4 | V5 | V6 | V7 |
表2
此外,应当注意的是,被清理后的数据中offset可能是不连续的,比如上表2中不存在offset:0和1,因此当Spark Streaming再从kafka集群中分批次读取这些数据时,若当前读取操作对应的偏移量为1,则需要在清理后的数据中查找大于该偏移量的相邻偏移量(即offset:2)对应的数据进行读取。
本实施例提供的上述数据清理方式可应用于某些特殊场景,比如用户资料更新,通过这种数据清除策略,整个消息集里就保存了所有用户最新的资料。
本实施例通过定时任务触发对Kafka集群中存放的历史数据进行有效清理,保证了磁盘空间的有效释放。
参考图4,图4为本发明流数据写入方法第三实施例的流程示意图。
基于上述各实施例,在本实施例中,所述步骤S30之后,所述方法还包括:
步骤S40':获取所述分布式文件系统中待迁移数据对应的当前数据格式;
需要说明的是,所述待迁移数据可以是相对较为重要,不能直接清除但又需要保存的数据,对于这类数据可以采用数据迁移的方式将它们换一个存储区域进行保存。所述当前数据格式,即待迁移数据在分布式文件系统中存放时的数据存放格式。
步骤S50':获取目标迁移数据库对应的数据存放格式,并比较所述当前数据格式与所述数据存放格式是否一致;
应理解的是,通常情况下数据库的数据存放格式可能有多种,若待迁移数据对应的当前数据格式包含在目标迁移数据库对应的数据存放格式(集合)之内,则可判定当前数据格式与数据存放格式是否一致,反之,则不一致。
步骤S60':在所述当前数据格式和所述数据存放格式不一致时,根据所述数据存放格式对所述待迁移数据进行格式转换;
需要说明的是,本实施例中,格式转换可以是采用现有的格式转换工具,在具体实现中可以先对目标迁移数据库进行类别划分,然后为每一类迁移数据库配置相应的格式转换工具,以及格式转换工具对应的调用接口,需要进行数据格式的转换时,直接调用对应的接口即可。
步骤S70':将格式转换后的待迁移数据发送至所述目标迁移数据库,以使所述目标迁移数据库利用循环冗余校验算法对所述待迁移数据进行一致性校验,并在校验通过时对所述待迁移数据进行储存。
应理解的是,数据格式转换以及传输过程中可能会遇到报错或者出错的情况,所导致的后果就是转换前的数据和转换后的数据的内容不一致。因此,为了保证一致性,本实施例中目标数据库还将利用循环冗余校验算法对待迁移数据进行一致性校验,只有在校验通过时才对待迁移数据进行储存。
循环冗余校验(Cyclic Redundancy Check,CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。本实施例将循环冗余校验算法结合到数据迁移场景中,有效的保证了数据迁移前后的数据一致性。
此外,本发明实施例还提出一种存储介质,所述存储介质上存储有流数据写入程序,所述流数据写入程序被处理器执行时实现如上文所述的流数据写入方法的步骤。
参照图5,图5为本发明流数据写入装置第一实施例的结构框图。
如图5所示,本发明实施例提出的流数据写入装置包括:
信息提取模块501,用于在实时流数据处理进程启动时,从预设数据库表的分布式消息信息字段中提取当前偏移量信息;
数据获取模块502,用于获取所述当前偏移量信息对应的数据分区信息;
数据写入模块503,用于根据所述数据分区信息从分布式消息订阅集群中获取待写入流数据,并将所述待写入流数据写入至分布式文件系统。
本实施例通过在实时流数据处理进程启动时,从预设数据库表的分布式消息信息字段中提取当前偏移量信息,然后获取当前偏移量信息对应的数据分区信息,再根据数据分区信息从分布式消息订阅集群中获取待写入流数据,并将待写入流数据写入至分布式文件系统。由于本实施例是从本地获取当前偏移量信息,然后根据当前偏移量信息从分布式消息订阅集群中获取待写入流数据然后进行的数据继续写入,相比于现有的引入其他的数据库组件来实现流数据的继续处理,本实施例不需要使用额外的数据库组件,既保证了磁盘的安全性,也保证了数据写入的连贯性。
基于本发明上述流数据写入装置第一实施例,提出本发明流数据写入装置的第二实施例。
在本实施例中,所述流数据写入装置还包括:信息对比模块,用于对分布式消息订阅集群的消息消费客户端进行初始化,并在初始化完后从所述分布式消息订阅集群中读取初始偏移量信息;将所述初始偏移量信息与所述当前偏移量信息进行比对,并根据比对结果判断所述当前偏移量信息是否满足预设时间条件;相应地,所述数据获取模块502,还用于在所述当前偏移量信息满足预设时间条件时,获取所述当前偏移量信息对应的数据分区信息。
进一步地,所述信息对比模块,还用于判断所述当前偏移量信息对应的偏移量与所述初始偏移量对应的偏移量是否一致;若一致,则判定所述当前偏移量信息满足预设时间条件;若不一致,则判定所述当前偏移量信息不满足预设时间条件。
进一步地,所述信息对比模块,还用于在所述当前偏移量信息不满足预设时间条件时,根据所述初始偏移量信息获取对应的数据分区信息;根据所述数据分区信息对所述预设数据库表的分布式消息信息字段进行字段信息更新;相应地,所述数据写入模块503,还用于根据所述数据分区信息从分布式消息订阅集群中获取待写入流数据,并将所述待写入流数据写入至分布式文件系统。
进一步地,所述流数据写入装置还包括:数据清理模块,用于获取所述待写入流数据在写入所述分布式文件系统时对应的文件分区;获取所述文件分区对应的剩余存储空间,并将所述剩余存储空间与预设空间阈值进行比较;在所述剩余存储空间低于所述预设空间阈值时,对所述文件分区进行数据清理。
进一步地,所述数据清理模块,还用于在所述剩余存储空间低于所述预设空间阈值时,获取所述文件分区中存放的历史数据;对所述历史数据对应的键对象进行遍历,并根据遍历结果确定相同键对象对应的偏移量集合;从时间维度上对所述偏移量集合中的每个偏移量进行比对,并根据比对结果从所述偏移量集合中选取目标偏移量;将所述所述偏移量集合中所述目标偏移量之外的其他偏移量对应的数据进行清除。
进一步地,所述流数据写入装置还包括:格式转换模块,用于获取所述分布式文件系统中待迁移数据对应的当前数据格式;获取目标迁移数据库对应的数据存放格式,并比较所述当前数据格式与所述数据存放格式是否一致;在所述当前数据格式和所述数据存放格式不一致时,根据所述数据存放格式对所述待迁移数据进行格式转换;将格式转换后的待迁移数据发送至所述目标迁移数据库,以使所述目标迁移数据库利用循环冗余校验算法对所述待迁移数据进行一致性校验,并在校验通过时对所述待迁移数据进行储存。
本发明流数据写入装置的其他实施例或具体实现方式可参照上述各方法实施例,此处不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如只读存储器/随机存取存储器、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种流数据写入方法,其特征在于,所述方法包括:
在实时流数据处理进程启动时,从预设数据库表的分布式消息信息字段中提取当前偏移量信息;
获取所述当前偏移量信息对应的数据分区信息;
根据所述数据分区信息从分布式消息订阅集群中获取待写入流数据,并将所述待写入流数据写入至分布式文件系统。
2.如权利要求1所述的流数据写入方法,其特征在于,所述获取所述当前偏移量信息对应的数据分区信息的步骤之前,所述方法还包括:
对分布式消息订阅集群的消息消费客户端进行初始化,并在初始化完后从所述分布式消息订阅集群中读取初始偏移量信息;
将所述初始偏移量信息与所述当前偏移量信息进行比对,并根据比对结果判断所述当前偏移量信息是否满足预设时间条件;
若满足,则执行所述获取所述当前偏移量信息对应的数据分区信息的步骤。
3.如权利要求2所述的流数据写入方法,其特征在于,所述将所述初始偏移量信息与所述当前偏移量信息进行比对,并根据比对结果判断所述当前偏移量信息是否满足预设时间条件的步骤,包括:
判断所述当前偏移量信息对应的偏移量与所述初始偏移量对应的偏移量是否一致;
若一致,则判定所述当前偏移量信息满足预设时间条件;
若不一致,则判定所述当前偏移量信息不满足预设时间条件。
4.如权利要求2所述的流数据写入方法,其特征在于,所述根据比对结果判断所述当前偏移量信息是否满足预设时间条件的步骤之后,所述方法还包括:
若不满足,则根据所述初始偏移量信息获取对应的数据分区信息;
根据所述数据分区信息对所述预设数据库表的分布式消息信息字段进行字段信息更新,并执行所述根据所述数据分区信息从分布式消息订阅集群中获取待写入流数据,并将所述待写入流数据写入至分布式文件系统的步骤。
5.如权利要求1至4任一项所述的流数据写入方法,其特征在于,所述根据所述数据分区信息从分布式消息订阅集群中获取待写入流数据,并将所述待写入流数据写入至分布式文件系统的步骤之后,所述方法还包括:
获取所述待写入流数据在写入所述分布式文件系统时对应的文件分区;
获取所述文件分区对应的剩余存储空间,并将所述剩余存储空间与预设空间阈值进行比较;
在所述剩余存储空间低于所述预设空间阈值时,对所述文件分区进行数据清理。
6.如权利要求5所述的流数据写入方法,其特征在于,所述在所述剩余存储空间低于所述预设空间阈值时,对所述文件分区进行数据清理的步骤,包括:
在所述剩余存储空间低于所述预设空间阈值时,获取所述文件分区中存放的历史数据;
对所述历史数据对应的键对象进行遍历,并根据遍历结果确定相同键对象对应的偏移量集合;
从时间维度上对所述偏移量集合中的每个偏移量进行比对,并根据比对结果从所述偏移量集合中选取目标偏移量;
将所述所述偏移量集合中所述目标偏移量之外的其他偏移量对应的数据进行清除。
7.如权利要求1至4任一项所述的流数据写入方法,其特征在于,所述根据预设数据结构将所述待写入流数据写入至分布式文件系统的步骤之后,所述方法还包括:
获取所述分布式文件系统中待迁移数据对应的当前数据格式;
获取目标迁移数据库对应的数据存放格式,并比较所述当前数据格式与所述数据存放格式是否一致;
在所述当前数据格式和所述数据存放格式不一致时,根据所述数据存放格式对所述待迁移数据进行格式转换;
将格式转换后的待迁移数据发送至所述目标迁移数据库,以使所述目标迁移数据库利用循环冗余校验算法对所述待迁移数据进行一致性校验,并在校验通过时对所述待迁移数据进行储存。
8.一种流数据写入装置,其特征在于,所述流数据写入装置包括:
信息提取模块,用于在实时流数据处理进程启动时,从预设数据库表的分布式消息信息字段中提取当前偏移量信息;
数据获取模块,用于获取所述当前偏移量信息对应的数据分区信息;
数据写入模块,用于根据所述数据分区信息从分布式消息订阅集群中获取待写入流数据,并将所述待写入流数据写入至分布式文件系统。
9.一种流数据写入设备,其特征在于,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的流数据写入程序,所述流数据写入程序配置为实现如权利要求1至7中任一项所述的流数据写入方法的步骤。
10.一种存储介质,其特征在于,所述存储介质上存储有流数据写入程序,所述流数据写入程序被处理器执行时实现如权利要求1至7任一项所述的流数据写入方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110610918.8A CN113297309B (zh) | 2021-05-31 | 2021-05-31 | 流数据写入方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110610918.8A CN113297309B (zh) | 2021-05-31 | 2021-05-31 | 流数据写入方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113297309A true CN113297309A (zh) | 2021-08-24 |
CN113297309B CN113297309B (zh) | 2023-11-10 |
Family
ID=77326767
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110610918.8A Active CN113297309B (zh) | 2021-05-31 | 2021-05-31 | 流数据写入方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113297309B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114385081A (zh) * | 2021-12-27 | 2022-04-22 | 联通智网科技股份有限公司 | 针对kafka集群的磁盘保护方法及相关设备 |
CN115150471A (zh) * | 2022-06-27 | 2022-10-04 | 北京百度网讯科技有限公司 | 数据处理方法、装置、设备、存储介质及程序产品 |
CN116700632A (zh) * | 2023-08-07 | 2023-09-05 | 湖南中盈梦想商业保理有限公司 | 一种高可靠的金融信息数据存储方法 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102843396A (zh) * | 2011-06-22 | 2012-12-26 | 中兴通讯股份有限公司 | 一种分布式缓存系统中的数据写入及读取方法及装置 |
CN108509299A (zh) * | 2018-03-29 | 2018-09-07 | 努比亚技术有限公司 | 消息处理方法、设备及计算机可读存储介质 |
CN108710472A (zh) * | 2018-04-27 | 2018-10-26 | 北京大学深圳研究生院 | 用于存储单元内部的磨损均衡管理方法及分布式存储系统 |
CN109271106A (zh) * | 2018-08-31 | 2019-01-25 | 华为技术有限公司 | 消息存储、读取方法及装置、服务器、存储介质 |
CN109388677A (zh) * | 2018-08-23 | 2019-02-26 | 顺丰科技有限公司 | 集群之间数据同步方法、装置、设备及其存储介质 |
CN111031135A (zh) * | 2019-12-17 | 2020-04-17 | 金瓜子科技发展(北京)有限公司 | 消息传送方法、装置及电子设备 |
CN111078422A (zh) * | 2019-11-19 | 2020-04-28 | 泰康保险集团股份有限公司 | 消息处理方法、消息处理装置、可读存储介质、电子设备 |
CN111258978A (zh) * | 2020-01-17 | 2020-06-09 | 广东小天才科技有限公司 | 一种数据存储的方法 |
CN111723160A (zh) * | 2020-08-24 | 2020-09-29 | 国网浙江省电力有限公司 | 一种多源异构增量数据同步方法及系统 |
CN111931105A (zh) * | 2020-07-20 | 2020-11-13 | 银盛支付服务股份有限公司 | 一种kafka消费指定推送时间数据处理方法 |
CN112328602A (zh) * | 2020-11-17 | 2021-02-05 | 中盈优创资讯科技有限公司 | 一种数据写入Kafka的方法、装置及设备 |
CN112765151A (zh) * | 2019-10-21 | 2021-05-07 | 深圳市茁壮网络股份有限公司 | 基于分布式存储系统随机写方法、装置及分布式存储系统 |
-
2021
- 2021-05-31 CN CN202110610918.8A patent/CN113297309B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102843396A (zh) * | 2011-06-22 | 2012-12-26 | 中兴通讯股份有限公司 | 一种分布式缓存系统中的数据写入及读取方法及装置 |
CN108509299A (zh) * | 2018-03-29 | 2018-09-07 | 努比亚技术有限公司 | 消息处理方法、设备及计算机可读存储介质 |
CN108710472A (zh) * | 2018-04-27 | 2018-10-26 | 北京大学深圳研究生院 | 用于存储单元内部的磨损均衡管理方法及分布式存储系统 |
CN109388677A (zh) * | 2018-08-23 | 2019-02-26 | 顺丰科技有限公司 | 集群之间数据同步方法、装置、设备及其存储介质 |
CN109271106A (zh) * | 2018-08-31 | 2019-01-25 | 华为技术有限公司 | 消息存储、读取方法及装置、服务器、存储介质 |
CN112765151A (zh) * | 2019-10-21 | 2021-05-07 | 深圳市茁壮网络股份有限公司 | 基于分布式存储系统随机写方法、装置及分布式存储系统 |
CN111078422A (zh) * | 2019-11-19 | 2020-04-28 | 泰康保险集团股份有限公司 | 消息处理方法、消息处理装置、可读存储介质、电子设备 |
CN111031135A (zh) * | 2019-12-17 | 2020-04-17 | 金瓜子科技发展(北京)有限公司 | 消息传送方法、装置及电子设备 |
CN111258978A (zh) * | 2020-01-17 | 2020-06-09 | 广东小天才科技有限公司 | 一种数据存储的方法 |
CN111931105A (zh) * | 2020-07-20 | 2020-11-13 | 银盛支付服务股份有限公司 | 一种kafka消费指定推送时间数据处理方法 |
CN111723160A (zh) * | 2020-08-24 | 2020-09-29 | 国网浙江省电力有限公司 | 一种多源异构增量数据同步方法及系统 |
CN112328602A (zh) * | 2020-11-17 | 2021-02-05 | 中盈优创资讯科技有限公司 | 一种数据写入Kafka的方法、装置及设备 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114385081A (zh) * | 2021-12-27 | 2022-04-22 | 联通智网科技股份有限公司 | 针对kafka集群的磁盘保护方法及相关设备 |
CN114385081B (zh) * | 2021-12-27 | 2023-03-24 | 联通智网科技股份有限公司 | 针对kafka集群的磁盘保护方法及相关设备 |
CN115150471A (zh) * | 2022-06-27 | 2022-10-04 | 北京百度网讯科技有限公司 | 数据处理方法、装置、设备、存储介质及程序产品 |
CN115150471B (zh) * | 2022-06-27 | 2024-03-29 | 北京百度网讯科技有限公司 | 数据处理方法、装置、设备、存储介质及程序产品 |
CN116700632A (zh) * | 2023-08-07 | 2023-09-05 | 湖南中盈梦想商业保理有限公司 | 一种高可靠的金融信息数据存储方法 |
CN116700632B (zh) * | 2023-08-07 | 2023-10-24 | 湖南中盈梦想商业保理有限公司 | 一种高可靠的金融信息数据存储方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113297309B (zh) | 2023-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113297309A (zh) | 流数据写入方法、装置、设备及存储介质 | |
US11023448B2 (en) | Data scrubbing method and apparatus, and computer readable storage medium | |
US11442961B2 (en) | Active transaction list synchronization method and apparatus | |
CN107220142B (zh) | 执行数据恢复操作的方法及装置 | |
CN109918349B (zh) | 日志处理方法、装置、存储介质和电子装置 | |
CN101136783B (zh) | 一种网管系统配置数据的备份、恢复方法及装置 | |
CN109194711B (zh) | 一种组织架构的同步方法、客户端、服务端及介质 | |
CN110445828B (zh) | 一种基于Redis的数据分布式处理方法及其相关设备 | |
CN110018996B (zh) | 一种分布式存储系统的快照回滚方法及相关装置 | |
CN111400298A (zh) | 数据处理方法及装置、计算机可读存储介质 | |
CN103716384A (zh) | 跨数据中心实现云存储数据同步的方法和装置 | |
CN108322318B (zh) | 告警分析方法及设备 | |
CN113553313A (zh) | 一种数据迁移方法及系统、存储介质、电子设备 | |
CN114741335A (zh) | 缓存管理方法、装置、介质及设备 | |
CN112711606A (zh) | 数据库访问方法、装置、计算机设备和存储介质 | |
CN111506646A (zh) | 数据同步方法、装置、系统、存储介质及处理器 | |
CN104022896A (zh) | 一种配置管理方法、装置及网络设备 | |
CN109271354A (zh) | 一种日志文件句柄更新方法及系统 | |
CN114780217B (zh) | 任务调度方法、装置、计算机设备以及介质 | |
CN115914387A (zh) | 资源共享及数据查询的方法、装置和服务器 | |
CN113760608B (zh) | 数据恢复方法和装置、电子设备和存储介质 | |
CN108763498B (zh) | 用户身份识别方法、装置、电子设备及可读存储介质 | |
CN113360558A (zh) | 数据处理方法、数据处理装置、电子设备及存储介质 | |
CN113254271A (zh) | 一种数据序列恢复方法、装置、设备及存储介质 | |
CN111061719A (zh) | 数据收集方法、装置、设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |