分布式存储中纠删码非对齐数据更新方法

文档序号:1755015 发布日期:2019-11-29 浏览:1次 >En<

阅读说明:本技术 分布式存储中纠删码非对齐数据更新方法 (Correcting and eleting codes non-alignment data-updating method in distributed storage ) 是由 董小社 李征 张兴军 王宇菲 于 2019-07-29 设计创作,主要内容包括:本发明公开了一种分布式存储中纠删码非对齐数据更新方法,在保证数据容错一致性以及数据可恢复的前提下,可实现纠删码数据的基本更新,并可实现纠删码数据的非对齐增量更新,接收用户发出的数据D&lt;Sub&gt;0&lt;/Sub&gt;的更新,将纠删码数据块数据直接更新在原有数据块上,将数据D&lt;Sub&gt;0&lt;/Sub&gt;更新所产生的纠删码校验块数据的更新以校验块数据更新增量Δ&lt;Sub&gt;0&lt;/Sub&gt;的形式直接追加到校验块数据之后的预留空间中,对于纠删码数据更新时数据块的非对齐部分,将非对齐部分的数据块D’直接追加在原始数据块之后,并将非对齐部分按特定编码系数编码追加到所更新的校验块之后,以实现纠删码的非对齐数据更新。本发明所解决的是分布式存储中纠删码大规模使用的瓶颈之一。(The invention discloses correcting and eleting codes non-alignment data-updating methods in a kind of distributed storage, under the premise of guaranteeing data fault-tolerant consistency and recoverable data, the basic update of correcting and eleting codes data can be achieved, and can realize the non-alignment incremental update of correcting and eleting codes data, receive the data D that user issues 0 Update, correcting and eleting codes data block data is directly updated on legacy data block, by data D 0 The update of correcting and eleting codes check block data caused by updating updates increment Delta with check block data 0 Form be directly appended in the reserved space after check block data, the non-alignment part of data block when being updated for correcting and eleting codes data, the data block D &#39; of non-alignment part is directly added after original data block, and after non-alignment part is appended to updated check block by specific coding coefficient coding, to realize that the non-alignment data of correcting and eleting codes update.Solved by the invention is one of the bottleneck of correcting and eleting codes large-scale use in distributed storage.)

分布式存储中纠删码非对齐数据更新方法

技术领域

本发明属于分布式存储领域,更具体的,涉及分布式纠删码存储系统的一种非对齐纠删码数据更新方法。

背景技术

副本策略和纠删码是分布式存储领域常见的两种数据冗余技术。相比于副本策略,纠删码具有更高的磁盘利用率。例如Reed-Solomon码是一种常见的纠删码。多副本策略即将数据存储多个副本(一般是三副本,比如HDFS),当某个副本丢失时,可以通过其他副本复制回来,然而三副本的空间利用率为1/3。

纠删码技术主要是通过纠删码算法将原始的数据进行编码得到冗余,并将数据和冗余一并存储起来,以达到容错的目的。其基本思想是将n块原始的数据元素通过纠删编码矩阵计算,得到m块冗余元素(校验块),其中由n个数据块与m个校验块组成的集合称为条带。对于这n+m块的元素,当其中任意的m块元素出错(包括原始数据和冗余数据)时,均可以通过对应的重构算法恢复出原来的n块数据。生成校验的过程被称为编码(encoding),恢复丢失数据块的过程被称为解码(decoding)。磁盘利用率为n/(n+m)。基于纠删码的方法与多副本方法相比具有冗余度低、磁盘利用率高等优点,成为分布式存储系统的一大主流。

然而现有的分布式纠删码存储相比三副本存储存在很多问题,其中纠删码的数据更新不够灵活是一大主要问题。其主要有以下原因:纠删码数据在编码产生校验块时需要将原始数据数据按照条带中固定的数据块大小进行切分,然后才能使用相应的编码矩阵对切分好的数据块进行编码产生校验块。在分布式存储系统中这些严格切分的数据块与校验块会被分别存储在多块磁盘乃至多台机器中,变得分散且不连续,数据更新往往会涉及系统中多台机器上的数据更新。另外,在进行纠删码数据更新时需要同时更新纠删码校验块,以保证数据的容错一致性。因此目前纠删码上的数据更新比较困难,需要严格规范化更新数据块的大小,极度不灵活,且目前尚无有效办法解决纠删码上的非对齐数据更新。

发明内容

针对现有分布式纠删码存储中存在数据更新不够灵活的缺陷,本发明的目的在于提出一种分布式存储中纠删码非对齐数据更新方法,本发明针对分布式纠删码存储系统的非对齐数据更新,其能够实现纠删码上的任意长度灵活数据更新,而不用受限于纠删码数据按特定块大小对齐与数据多节点分散不连续所带来的问题,同时保证了纠删码数据在容错上的一致性,从而解决分布式纠删码存储系统上数据更新难且不够灵活的问题,使分布式纠删码存储系统能够做到灵活任意的数据更新。

为实现上述目的,本发明采用如下技术方案:

分布式存储中纠删码非对齐数据更新方法,包括以下步骤:

S1,分布式存储集群中主节点按照纠删码条带分块的大小将与原始数据D0相对应部分Phead+ΔPhead到Ptail-ΔPtail的待更新数据进行等量切分,得到数据段1,并按照S2~S4进行更新,将ΔPhead与ΔPtail部分按照步骤S5进行更新,ΔPhead与ΔPtail部分记为数据段2;

其中,Phead为待更新数据D’对应到原纠删码条带的起始位,Ptail为待更新数据D’对应到原纠删码条带的终止位;ΔPhead为待更新数据D’与原始数据D0的起始位差值,ΔPtail为待更新数据D’与原始数据D0的终止位差值;

S2,对于数据段1,主节点按照原始纠删码条带分块的大小将待更新数据进行等量切分,并根据待更新数据D’的起始位与终止位计算切分后数据块对应的存储节点位置,将切分后的数据块发送到相应位置上的各个存储节点;

S3,在每个待更新存储节点上,读取与待更新数据块对应的原始数据块至内存,计算待更新数据块与原始数据块的增量值Δchunk;根据原纠删码编码矩阵系数,将各增量值Δchunk编码发送到纠删码校验块存储节点,追加写到相关纠删码校验块之后,最后发送落盘结束ACK给主节点;

S4,主节点收到所有增量值Δchunk在纠删码校验块存储节点落盘结束ACK之后,发送信号给各待更新数据块节点,待更新数据块节点将原始数据块替换为更新后的新数据块;待所有数据块更新节点回馈ACK给主节点,主节点更新校验块的尾指针;

S5,对于数据段2,当数据段2长度小于一个条带大小时,将ΔPhead与ΔPtail对应的数据追加写到待更新数据D’的起始位Phead与终止位Ptail对应的存储节点上进行落盘,同时将待更新数据D’中ΔPhead与ΔPtail部分的数据发送到对应的校验块存储节点追加落盘,结束返回事务结束回复消息ACK给主节点;

当数据段2长度大于一个条带大小时,将非对齐部分的数据按照条带大小进行切分,将能够切分出的条带块大小数据通过纠删码编码矩阵计算出完整的条带,发送至相应的节点进行存储;同时将待更新数据D’中ΔPhead与ΔPtail不足条带大小部分的数据追加写到待更新数据D’的起始位Phead与终止位Ptail对应的存储节点上进行落盘,对待更新数据D’中ΔPhead与ΔPtail不足条带大小部分的数据使用Galois域中编码系数1进行编码并发送到相对应的校验块存储节点追加落盘,最后返回ACK给主节点;

S6,待主节点收到所有落盘结束ACK之后,发送尾指针更新命令给所有更新节点,各更新节点收到尾指针更新命令后,先更新各数据块与校验块的元数据,再更新各数据块与校验块的尾指针到最新位置,待尾指针更新结束,主节点更新元数据,非对齐数据更新完毕。

S5中,将待更新数据D’中ΔPhead与ΔPtail部分的数据发送到与之相关的校验块存储节点追加落盘时:

当待更新数据D’中ΔPhead与ΔPtail部分的数据对应的校验块存储节点只有一个校验块节点时,将待更新数据D’中ΔPhead与ΔPtail部分的数据发送到相对应的校验块第一存储节点追加落盘;

当待更新数据D’中ΔPhead与ΔPtail部分的数据对应的校验块存储节点有至少两个校验块节点时,将待更新数据D’中ΔPhead与ΔPtail部分的数据发送到相对应的校验块任意两个存储节点追加落盘。

S5中,将待更新数据D’中ΔPhead与ΔPtail不足条带大小部分的数据使用Galois域中编码系数1进行编码并发送到相对应的校验块存储节点追加落盘时:

当待更新数据D’中ΔPhead与ΔPtail不足条带大小部分的数据对应的校验块存储节点只有一个校验块节点时,将待更新数据D’中ΔPhead与ΔPtail不足条带大小部分的数据使用Galois域中编码系数1进行编码并发送到相对应的校验块第一存储节点追加落盘;

当待更新数据D’中ΔPhead与ΔPtail不足条带大小部分的数据对应的校验块存储节点有至少两个校验块节点时,将待更新数据D’中ΔPhead与ΔPtail不足条带大小部分的数据使用Galois域中编码系数1进行编码并发送到相对应的校验块任意两个存储节点追加落盘。

还包括如下步骤:

S0.1,分布式存储集群中主节点接收客户端发送的对原始数据D0的更新请求,根据客户端数据更新请求指令将原始数据D0对应的纠删码条带读取到各存储节点的内存中,主节点记录原始数据D0的起始位置与长度;

S0.2,客户端发送待更新数据D’到主节点,主节点根据待更新数据D’的起始位偏移量与长度计算出待更新数据D’对应到原纠删码条带的起始位Phead与终止位Ptail

S0.3,主节点比较待更新数据D’与原始数据D0的数据偏移量与数据长度,分别计算出待更新数据D’与原始数据D0的起始位差值ΔPhead与终止位差值ΔPtail

S0.4,根据ΔPhead与ΔPtail判断是否为非对齐数据更新,若为非对齐数据更新,则进行S1~S6。

若ΔPhead与ΔPtail都等于0,则表示待更新数据D’与原始数据D0起始位与终值位相互对齐,则本次更新为可对齐数据更新。

若ΔPhead与ΔPtail中任意一项不等于0,表示待更新数据D’相比于原始数据D0存在增添量,则此次更新为非对齐数据更新。

当S6结束后,主节点发送更新完毕信号ACK给客户端,整体更新流程完毕。

与现有技术相比,本发明具有如下有益效果:

本发明分布式存储中纠删码非对齐数据更新方法在保证纠删码高效的空间利用率与容错能下,通过对非对齐数据更新进行分割判定,依据非对齐数据更新不同部分的特征采用不同的编码方式以及不同的存放策略,能够在保证数据一致性的情况下实现分布式存储中纠删码的非对齐数据更新。本发明首先通过对分布式系统中纠删码数据更新具体情况的判断,使用基于原有编码矩阵与Galois域中编码系数1对不同部分进行编码,提高了分布式存储中纠删码数据的编码及更新效率。其次通过对非对齐数据更新的不同部分采用不同的存放策略分别存放,将纠删码的非对齐数据更新到与之紧密相关的存储节点,使纠删码数据更新不再受纠删码数据跨故障域分散与块对齐的约束,可以做到任意长度,任意位置的数据更新。本发明对分布式存储上纠删码的非对齐数据更新中不足一条带部分采用随机存放的策略,可以提高空间利用率保证分布式存储的容错一致性。最后,本发明中采用的收到所有节点更新完毕信号后再更新数据段尾指针的方式可以很好的保证数据不丢失,维持事务的原子性,同时不会破坏纠删码数据存储时数据块与校验块数据的容错一致性与空间利用率。综上所述,本发明能够实现纠删码上的任意长度灵活数据更新,而不用受限于纠删码数据按特定块大小对齐与数据多节点分散不连续所带来的问题,同时保证了纠删码数据在容错上的一致性,从而解决分布式纠删码存储系统上数据更新难且不够灵活的问题,使分布式纠删码存储系统能够做到灵活任意的数据更新。

附图说明

图1是本发明分布式存储中纠删码非对齐数据更新方法整体流程图。

图2是现有技术分布式存储系统中常用的纠删码架构图,其中纠删码数据会被划分成不同的数据块并组织成不同的条带,每个条带贯穿所有的数据块节点与校验块节点,而条带上每个块都根据分布式存储系统的故障域设定存储在不同的节点上。

图3为本发明中判定为非对齐的数据更新对照示意图,其中待更新数据与原始数据有着不同的offset与length,这样待更新数据无法对齐到原始数据上。

图4为本发明非对齐部分数据校验块编码系数的判定原则流程示意图。

具体实施方式

为说明本发明的目的、方案、技术细节与具体实施方式,以下结合附图对本发明进行进一步的详细说明。

参照图1,本发明分布式存储中纠删码非对齐数据更新方法,包括以下步骤:

(1)分布式存储集群中主节点接收客户端发送的对原始数据D0的更新请求,根据请求将原始数据D0对应的纠删码条带读取到各存储节点的内存中,其中记录原始数据D0的起始位置与长度(offset+length)。

(2)客户端发送待更新数据D’到主节点,主节点根据待更新数据D’的起始位偏移量与长度(offset+length)计算出待更新数据D’对应到原纠删码条带的起始位Phead与终止位Ptail

(3)主节点比较待更新数据D’与原始数据D0的数据偏移量与数据长度,分别计算出待更新数据D’与原始数据D0的起始位差值ΔPhead与终止位差值ΔPtail

(4)若ΔPhead与ΔPtail都等于0,表示待更新数据D’与原始数据D0起始位与终值位相互对齐,则本次更新为可对齐数据更新;若ΔPhead与ΔPtail中任意一项不等于0,表示待更新数据D’相比原始数据D0存在增添量,则此次更新为非对齐数据更新。

(5)对于要进行的非对齐数据更新,分布式存储集群中主节点按照纠删码条带分块的大小将与原始数据相对应部分(Phead+ΔPhead到Ptail-ΔPtail)的待更新数据进行等量切分,并按照下述步骤(6)~步骤(8)进行更新,将切分出的ΔPhead与ΔPtail部分按照步骤(10)~步骤(13)进行更新。

(6)对于切分出的Phead+ΔPhead到Ptail-ΔPtail部分数据,主节点按照原始纠删码条带分块的大小将待更新数据对齐到原始数据D0上,并按照纠删码数据块的的切分位置对待更新数据D’进行等量切分。最后根据待更新数据D’的起始位与终止位计算切分后数据块对应的存储节点位置,将对齐切分后的数据块发送到对应的各个存储节点上,暂时存储在内存中。

(7)在每个待更新存储节点上,读取与待更新数据块对应的原始数据块至内存,计算待更新数据块与原始数据块每一块的增量值Δchunk=chunk_D’-chunk_D0。根据原始纠删码编码矩阵,分别将各Δchunk*Aij(Aij为编码矩阵中相应的系数)发送到纠删码校验块存储节点并追加写到相关联纠删码校验块之后。待数据落盘结束,发送成功信息ACK给主节点,表示落盘成功。

(8)主节点收到所有ΔChunk在纠删码校验块存储节点落盘结束ACK之后,发送信号给所有待更新数据节点,在每个待更新节点上,各数据块节点将原始数据块替换为更新后的新数据块。等所有待更新节点上使用新的数据块将原始数据块更新完毕后,待更新节点回馈成功ACK给主节点。

(9)当主节点收到所有实际更新节点所回馈的更新成功信号ACK后,主节点发出信号更新校验块的尾指针,更新完毕。

其中上述二段式的更新方式,能够保证数据不会丢失,同时维护了事务的原子性,当更新过程中出现意外时,主节点不会更新校验块节点的数据尾指针,保证了整体系统不会因更新过程中的意外而丢失数据或者产生数据不一致。

10)对于切分出的ΔPhead与ΔPtail部分的数据长度进行判断,若长度大于一条带中数据段长度时,将ΔPhead与ΔPtail部分的数据按照条带中数据段长度进行切分,对于切分出的满足数据段长度数据按照原矩阵编码,对于切分出的不足一条带数据段长度数据按照Galois域中特定的编码系数(即Galois域中编码系数1)进行编码。

11)对于在ΔPhead与ΔPtail部分上切分出的可满足条带数据段长度的数据,主节点先获取原编码矩阵,使用原编码矩阵逐个对切分出的条带数据段长度数据进行比编码,产生校验块数据,将数据块数据与校验块数据发送至对应存储接节点落盘,落盘结束返回ACK给主节点,但不更新元数据。按此方法对所有可原矩阵编码的数据进行编码,发送,落盘。

(12)对于在ΔPhead与ΔPtail部分上切分出的不足条带数据段长度数据,先将ΔPhead与ΔPtail上该部分数据追加写到待更新数据D’起始位Phead与终止位Ptail对应的存储节点上进行落盘,完毕返回ACK给主节点,但不更新数据段的尾指针。同时将待更新数据D’中ΔPhead与ΔPtail部分的数据以特定单位阵进行编码发送到与之相关的校验块任意两个存储节点(若只有一个校验块节点,则默认校验块第一存储节点)落盘,完毕返回ACK给主节点,同样不更新数据段的尾指针。

(13)当主节点收到所有落盘完毕ACK之后,发送尾指针更新命令给所有更新节点,各节点收到尾指针更新命令后,更新各数据块与校验块的尾指针为最新的位置,带尾指针更新结束,主节点更新元数据。非对齐数据更新完毕。

(14)当更新完毕后,主节点发送更新完毕信号ACK给客户端,整体更新流程完毕。

实施例

本实施例分布式存储中纠删码非对齐数据更新方法,包括以下具体步骤:

步骤1.客户端节点将写请求的对象id定位到分布式纠删码存储集群的主节点,然后写请求对象的id,数据更新偏移量offset以及数据更新长度length发送到主节点。计算出需要更新的原始数据首地址偏移量off_head与尾地址偏移量off_tail。

步骤2.客户端将待更新数据的具体更新数据buffer,对应到原始数据的偏移量offset发送至主节点,主节点根据待更新数据的buffer长度以及对应的偏移量计算出待更新数据的首地址偏移量Phead与尾地址偏移量Ptail

步骤3.主节点根据计算出的原始数据首尾地址偏移量(off_head、off_tail)与待更新数据首尾地址偏移量计算出待更新数据首地址偏移量差ΔPhead=off_head-Phead,与尾地址偏移量差ΔPtail=Ptail-off_tail。

步骤4.主节点动态选择数据更新的具体流程,判断依据为:判断ΔPhead与ΔPtail是否都为0;(1)若全都为0,则表明待更新数据与原始数据的首尾地址偏移量为0,待更新数据与原始数据可以对齐,转为进行可对齐数据更新流程;(2)若ΔPhead与ΔPtail中任意一项不为0,则表示待更新数据与原始数据首尾地址偏移量上存在差异,意味新旧数据长度上不相等或是头尾偏移量上存在错位,则转入非对齐数据更新流程,部分流程细节如图1所示。

步骤5.主节点对当前对象的写请求加锁,保证在读取了原始数据时不会产生新的数据改动。

步骤6.等待当前对象的写请求加锁结束,主节点根据原始数据的偏移量与长度来确定本次更新所涉及的条带,记录所涉及的条带的序号,再读取相应位置及长度的原始数据到内存中,并将读取到内存中的原始数据数据按照每个条带中数据块的总大小进行划分,按照分段标记同样的序号。

步骤7.将原始数据读取并按条带划分结束后,整体进入更新流程中的写流程,主节点按照如下数据更新流程具体进行更新过程中的写入部分。

步骤8.若主节点判定为进行可对齐数据更新流程,客户端发送来的待更新数据与主节点读取到的原始数据具有相同的首尾地址偏移量,将待更新数据按照首尾对齐的方式对齐到待更新数据上如图3。

步骤9.将首尾对齐后的待更新数据按照每个条带上数据块的总长度进行切分,得到每个条带的数据范围,并按照上述步骤6中得到的条带序号进行标记,将待更新数据对齐转化为条带的对齐,由此细化实际更新的作用范围。

步骤10.将所切分并对齐好了的数据块条带与原始数据切分出的条带块按照其首尾地址的偏移量一一对齐。

步骤11.主节点读取纠删码配置文件获取每个数据块的大小chunk_size,对每个对齐好的数据块条带按照chunk_size大小进行切分,由于最初是切分出的数据是条带块对齐的,所以按照数据块大小切分出的待更新数据块chunk_new与原始数据数据块chunk_old也是按照块对齐的。最后将对齐好的数据块进行统一标号(规则按照纠删码条带中数据块的排序标记)。

步骤12.主节点获取纠删码编码矩阵,获取纠删码编码矩阵中与更新块数据块序号相关的编码矩阵系数,并同时记录涉及到数据块更新的编码矩阵行序号。

步骤13.根据编码矩阵计算,先计算出对齐好了的chunk_new与chunk_old之间的差值Δchunk(具体规则为Δchunk=chunk_new-chunk_old),再用Δchunk乘以纠删码编码矩阵中相应的系数,得到每一个校验块应该记录的块(校验块更新量)。

步骤14.主节点同步的将编码所产生的校验块更新量连同其元数据发送至所有相应的校验块存储节点进行罗落盘,其中校验块存储节点根据所接收的校验块更新量元数据找到所更新的对象id及其所存储的位置,然后将校验块更新量追加在原始校验块之后,待数据落盘结束,校验块存储节点向主节点回复数据放置完成的ACK信号。

步骤15.在校验块节点更新数据时,主节点数据更新进程阻塞,等待接收所有校验块跟更新节点的数据追加写完毕信号。待收到所有涉及校验块更新节点的数据更新完毕信号后,主节点开始更新需要更新的数据块节点。

步骤16.主节点将所有切分并对齐好的chunk_new及其需要替换的数据位置按照其数据更新位置发送到相应的数据块存储节点进行更新,主节点同时阻塞更新进程等待数据块更新节点的更新完成信号ACK。

步骤17.所有待更新数据块节点收到更新数据块与其位置时,将相应位置上的数据块读至内存,采用新的数据块替换相应位置上的原数据块,等待替换完毕,发送更新完毕ACK信号给主节点。

步骤18.主节点接收到所有数据块更新节点完毕的ACK后,主节点更新相应对象自身的元数据版本号,并发送尾指针更新命令到校验块更新节点。校验块节点接收到尾指针更新命令后更新相应对象相应块的尾指针到追加的校验块更新量的尾部并返回结束信号给主节点,主节点收到所有校验块尾指针更新结束信号后,更新流程完毕。

步骤19.若在步骤4中主节点判断为非对齐数据更新,同样需要进行整个对象的写加锁等流程,特别的需要将不可对齐数据根据客户端输入的起始地址偏移量与长度进行切分。

步骤20.其中主节点需要将待更新数据按照ΔPhead与ΔPtail的判定情况将待更新数据划分为两部分,一部分为可对齐的更新数据,另一部分为ΔPhead与ΔPtail的部分,即为不可对齐的更新数据部分。

步骤21.对于切分出的可对齐数据更新数据部分,按照上述同样流程更新到相应的数据块节点与校验块更新节点,同时进行不可对齐数据部分的更新。

步骤22.其中主节点切分出不可对齐部分数据进行判断,若其可以切分出一完整的数据块条带,则将其分为可条带化编码部分(系数乘编码矩阵中相应系数)与不可条带化编码部分(系数乘1部分)若无法切分出一完整的数据块条带,则全视为不可条带化编码部分数据进行处理,如图4所示。

步骤23.主节点根据不可对齐数据是否可以条带化切分编译的判定结果进行切分,若可以切出整个数据块条带,将非对齐部分的数据按照条带数据块大小进行切分。将可以切分出的条带块大小数据通过纠删码编码矩阵计算出完整的条带,发送至相应的节点进行存储;等相应存储节点存储结束,发送落盘完毕ACK信号给主节点;

步骤24.主节点将D’中ΔPhead与ΔPtail不足一条带块大小部分的数据按照数据块大小划分,将其切分后的块乘以系数1产生校验块更新量,连同存储位置及元数据发送到与之相关的校验块第一二存储节点(若只有一个校验块节点,则默认校验块第一存储节点)落盘;主节点将不足条带部分数据原始数据连同存储位置及元数据发送给相应的数据块存储节点进行落盘。主节点进入阻塞状态,等待落盘完成ACK信号。

步骤25.各存储节点将产生的数据块根据其元数据信息及位置追加写到D’起始位Phead与终止位Ptail对应的存储节点上进行落盘,完毕返回ACK给主节点。完毕返回ACK给主节点。

步骤26.主节点接收到所有数据块更新节点完毕的ACK后,主节点更新相应对象自身的元数据版本号,并发送尾指针更新命令到数据块及校验块更新节点。数据块及校验块节点接收到尾指针更新命令后更新相应对象相应块的尾指针到追加的校验块更新量的尾部,数据块同理并返回结束信号给主节点,主节点收到所有校验块尾指针更新结束信号后,最终提交更新Commit,更新流程完毕。

13页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:数据存储方法、装置、计算设备、存储系统及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类