- 博客(854)
- 资源 (9813)
- 收藏
- 关注
原创 tc:command not found与Error: Specified qdisc not found
2. 故障描述“Error: Specified qdisc not found” 在 Kylin 中,qdiscs 作为内核模块在名为 kernel-modules-extra 的包中提供。1.故障描述Kylin 用tc做流量控制“tc:command not found”报错,发现系统最小安装的时候没有默认安装这相关组件。3、安装完要reboot重启。
2023-05-24 15:50:10
26
原创 新特性解析丨TiDB 资源管控的设计思路与场景解析
任意一个会话属于唯一的资源组,而同一资源组的所有会话共享同一组资源限额。资源管控技术(Resource Control)是 TiDB 7.0 版本中优化提升的重要能力之一,不仅可以在负载剧烈变化时,保证服务质量,同时提供了数据库的多租户隔离能力,能够有效地降低数据库运行成本,帮助企业节省信息化管理开支,提升企业的竞争力。:通过分析历史运行数据,提供资源管理的建议,协助客户发现资源配置的潜在问题和风险,结合 TiDB Cloud 的部署运行经验,为客户提供更经济更合理的资源配置建议,协助企业的成本控制。
2023-05-03 10:36:15
44
原创 方案精讲丨TiDB 在社交场景的解决方案实践
在通讯信息层的账号中心功能上,对于面向出海的应用来说,用户的分布往往是在不同国家和地区,对此, TiDB 可以支持本地读的跨 Region Global Database,用户可以在本地完成数据身份的验证;对大数据量的通讯来说,TiDB 也提供了弹性的扩容能力,用户不需要分库分表来打散数据,可以针对不同的 TiDB 组件进行扩容,比如在计算能力不足时可以扩容 TiDB Server,存储能力不足时可以扩容 TiKV 节点,AP 能力不足时可以扩容 TiFlash 节点,是非常灵活的。第二个时效性的挑战。
2023-05-03 10:35:30
38
原创 TiDB Raft KV 新引擎:更高级别的可扩展性和写性能
当每个 TiKV 节点有 2TB+ 数据时,由于读/写放大的影响,性能稳定性会受到影响。因此,为了跟上快速增长的数据量,即使查询流量保持稳定,B 公司也必须每月添加 TiKV 节点来匹配数据大小。为了解决这个问题,B 公司想出了一个解决方案 - 冷热数据分离。首先,为了减少已处理数据的影响,他们必须将其与原始数据分开,现在他们有两个集群,一个用于存放已处理数据,另一个用于存放原始数据。
2023-05-03 10:34:51
41
原创 方案精讲丨TiDB 助力 Fintech 构建新一代数据服务平台
本文讨论了金融科技(Fintech)行业在数据基础设施建设上所面临的挑战,以及 TiDB 数据库在解决这些挑战方面的天然优势。TiDB 的 HTAP 架构和强大的水平扩展能力,为 Fintech 甚至是 Web3 的企业提供了重要的业务价值。本文将探讨 TiDB 如何应对 Fintech 行业的痛点,以及它为这些企业带来的实际价值。
2023-05-03 10:34:08
42
原创 TiCDC 源码阅读(七)TiCDC Sorter 模块揭秘
Sorter 将行变更组装回事务,在实现上是基于排序的,即将一个表内部的所有行变更,按照 CommitTs 和 StartTs 作为前缀排序,这样属于同一个事务的所有行变更就被聚合在一起了,这样就还原了上游事务的本来面貌。即使在一个 Region 内部,事件也不一定完全是有序的,这是因为 KV-Client 在订阅一个 Region 时,实际上建立了两条数据流:一条通过 Observer 监听这个订阅建立之后的所有变更,另一条则扫描 TiKV 的上该 Region 的行记录,被称为“增量扫”。
2023-05-03 10:33:56
9
原创 TiDB x 云盛海宏丨加速精细化运营,云海零售系统的架构演进
2016 年为了支撑数字化业务,我们进行了业务流程的变革,并升级了我们的 IT 架构,上线了云海零售系统,这是当时的系统架构图。但这套架构也增加了实时分析的难度,做到了数据的共享,但因为数据做了拆分,如果要做一些复杂的需求,比如一些报表,比较复杂的 SQL,还有一些其他业务的时候就会增加相应的难度,一方面由于 MyCAT 对复杂 SQL 的支持有限、另外 MySQL 大表复杂查询效率也有限,所以我们通过 Otter 将数据实时汇聚到 Oracle 中,在 Oracle 上进行复杂的 SQL 查询。
2023-05-03 10:33:03
21
原创 方案精讲丨电商数据技术栈,在海量数据增长下如何实现实时与全量兼得?
外贸数字化所导致的全球贸易新格局正在形成。在浪潮之下,已经有相当多的企业正在尝试拥抱于 此。跨境电商成为一个高速发展的行业,但快速增长的用户量与流量也对电商平台的技术架构带来 冲击,TiDB 新一代分布式数据库的水平扩展架构可轻松应对节日大促与秒杀带来的数据量激增问题。同时,作为一个开源数据库,TiDB 的系统和生态非常开放。它可以连接到各种应用程序和大数据生态系统,同时还可以与私有云、公有云集成。其 HTAP 一栈式实时数据分析能力,也让数据实时分析成为可能,帮助企业提升运营效率,赢得市场先机。
2023-05-03 10:31:36
37
原创 TiDB in SaaS丨TiDB 在 Moka BI 场景下的应用
Moka 是一家致力于为全员带来更好体验的 HR SaaS 服务商,从 2015 年成立到现在已累计获得数十亿元的融资,先后服务小米、万科、太平洋保险等各领域的头部企业,累计服务超 2000 家客户,核心产品智能化招聘管理系统和人力资源管理系统,为中大型企业提供从招聘、入职、薪酬、假勤、绩效等人力资源全模块管理,为企业提供极致体验、数据驱动的 HR SaaS 产品,致力于通过一流技术和服务赋能企业的人才战略。
2023-05-03 10:30:41
31
原创 TiCDC 源码阅读(六)TiCDC Puller 模块介绍
Run 方法,这是一个阻塞的方法,上层调用者通过单独的 goroutine 来运行 Run 方法,来驱动 Puller 向 TiKV 发送请求,并处理 TiKV 发送过来的事件,输出到 Puller 的 output channel 中;Output 方法,这个方法比较简单直观,它返回一个 channel 以供上层消费数据。Puller 确定需要拉取哪些 KV region 的方式Puller 初始化、还原事务的操作Puller 推进 resolved ts 的过程。
2023-05-02 23:50:27
11
原创 TiCDC 源码阅读(五)TiCDC 对 DDL 的处理和 Filter 解析
在 Changefeed 的运行过程中,TiCDC 会持续维护和更新 Schema 信息,每次有新的 DDL 事件到来的时候,TiCDC 都会把 DDL 事件应用到这个 Schema 上面,以保证 Schema 和上游 TiDB 中的 Schema 是一致的。中只保存了每张表最新的那份信息,原因在于 Owner 节点只负责 DDL 的同步,并且 TiCDC 保证了 DDL 的同步是线性有序的,它在解析下一条 DDL 的时候,只需要上一条 DDL 执行结束的时候的 Schema 信息就可以确保解析的正确性。
2023-05-02 23:49:44
13
原创 携程 x TiDB丨应对全球业务海量数据增长,一栈式 HTAP 实现架构革新
引入 TiKV 是因为携程现在的业务有一些简单的 KV 存储需求,携程在使用的产品有 Redis 和 Hbase,但是 Hbase 的性能相比于 Redis 比较差,而 Redis 则存在数据不一致的风险,比如网络抖动、中断等。2018 年,携程开始正式引入 TiDB。因此,携程最终选择了 TiDB,将酒店和度假结算业务从 SQL server 迁移到 TiDB 上,总数据量规模达到 8TB,并受到了开发人员的一致好评,满足了性能和扩展性的诸多要求,同时降低了运维成本,能够更好地支持携程业务的发展。
2023-05-02 23:49:31
18
原创 坚如磐石: TiDB 基于时间点的恢复特性优化之路
对于数据库产品而言,基于时间点的恢复是非常重要的基础能力,它允许用户根据需要,将数据库恢复到特定时间点,以帮助客户的数据库免受意外损坏或错误操作的影响。例如,数据库在某个时间点之后的数据遭受了意外的删除或损坏,则可以使用 PiTR 功能将数据库恢复到该时间点之前的状态,从而避免丢失重要数据。由于 TiDB 数据库,每一次的数据改变都会产生对应的分布式日志,其中记录了数据库每一次变更的信息,包括事务 ID、时间戳和变更的具体内容。
2023-05-02 23:47:53
7
原创 技术出海|TiDB 在智能制造中的应用实践
如今,智能制造正成为世界经济全球化背景下制造企业的重点,传统制造企业纷纷在寻求转型为智造企业的方法,如何快速打通制造企业在数据获取、集成和应用展示的数据通路将成为企业转型成功的关键要素。而通过上面的案例解析,我们可以清晰地看到 TiDB 在智能制造的各个数据流动环节中都可以发挥其独特的价值,而随着 TiDB 整体产品形态不断丰富和完善(比如 TiDB Cloud Serverless),我们有理由相信 TiDB 将会在智能制造行业发挥出更大的价值,助力越来越多的制造企业迈向全新的智造时代!
2023-05-02 23:47:46
16
原创 浅谈 HTAP 混合技术和金融业应用场景
在大数据业务领域,事务(Transaction)和分析(Analysis)具有强相关性,人们为了进行海量数据的实时分析,发明了 TA 融合这一技术,而 HTAP 则是在存储、计算等方面具有极佳的线性扩展能力,能够更好地解决海量数据的容量问题。一是支持 TP 与 AP 混合的事务处理和分析过程。二是具有水平扩展能力,通过简单增加新节点即可按需实现 TiDB 的水平扩展,进而轻松满足高并发、海量数据场景需要。
2023-05-02 23:46:51
19
原创 TiDB Serverless 和技术生态全景
数据库不是单一软件,而是一个生态体系。成为一款好用的数据库,除了产品自身的能力外,繁荣的技术生态体系也至关重要,既可以提升使用体验,又可以降低使用门槛。PingCAP 在 2022 年 11 月 1 日正式发布了 TiDB Cloud Serverless Tier,本次分享在介绍 Serverless Tier 的技术细节之余,全面解析 TiDB 的技术生态全景和在生态构建中所做的努力。阅读本文,了解有关 Serverless 的更多信息,以及 PingCAP 在技术领域的最新进展。
2023-05-02 23:45:21
13
原创 方案精讲丨降低架构复杂度、实现成本节约:TiDB 多业务融合方案(下)
在多业务融合场景中,利用 TiFlash 列存的扩展实现多业务实时分析,利用 TiKV Learner 的扩展实现多业务的统一视图,且保证业务之间的隔离互不影响。具体架构图如下:多业务融合完整 HTAP 能力本文进一步介绍了多业务融合之后如何基于 TiDB 的能力实现用户扩展需求,充分体现了 TiDB HTAP 、架构灵活、弹性扩缩容能力。TiDB 强大的 HTAP 能力:可以非常简单实现实时全域数据强一致性分析和统一视图的能力,充分释放和挖掘实时全域数据价值。
2023-05-02 23:42:58
12
原创 网易游戏实时 HTAP 计费风控平台建设
众所周知,网易互娱的核心业务之一是线上互动娱乐应用服务,比如大家耳熟能详的梦幻西游、阴阳师等都是网易互娱的产品。不管是游戏产品还是其他应用,都需要做出好的内容来吸引用户进行应用内购买,进而产生盈利。当用户在商城里点击商品进行购买的时候,会弹出支付界面,进行验证、支付后,就可以收到道具了。这个过程对于用户来说往往都是一些非常简单的操作,但为了保证这个过程可以正确结算、发货,整个支付流程其实跨越了很多服务提供商和终端,走了一条相当复杂的调用链路。
2023-05-02 23:41:50
14
原创 TiDB 在安信证券资产中心与极速交易场景的实践
而证券行业特点使流量负载和流量峰值很难预测,原有的架构设计在一些业务峰值的数据承载以及性能上会有一定的瓶颈,特别是在数据峰值比较大的时候,如果需要扩展,对架构的改动较大,风险也相应提高。建议在改造迁移的时候,比如说从 MySQL 等数据库迁移,在开发的时候要重视开发规范,比如严格使用事务显式声明,像 begin 加上需要执行的SQL语句,加上 commit 的方式,特别是对于 DML 语句,尽可能保证这个事务机制与原来的传统关系型数据库(像 MySQL)一致,减少开发的复杂度,保证数据的准确性。
2023-05-02 23:39:35
17
原创 TiCDC 源码阅读(四)TiCDC Scheduler 工作原理解析
将一个 Changefeed 所有需要被同步的表,分发到不同的 TiCDC 节点上进行同步工作,以达到负载均衡的目的。维护每张表的同步进度,同时推进 Changefeed 的全局同步进度。本次介绍的 Scheduler 相关代码都在Coordinator 运行在 Changefeed,是 Scheduler 的全局调度中心,负责发送表调度任务,维护全部同步状态。Agent 运行在 Processor,它接收表调度任务,汇报当前节点上的表同步状态给 Coordinator。
2023-05-01 10:48:53
11
原创 微众银行 TiDB HTAP 和自动化运维实践
本文主要讲述了微众银行对于 HTAP 架构的探索和实践情况,以及提升大规模分布式数据库运维效率的经验。内容将从四个方面展开:HTAP 技术的演进历程、微众银行在 HTAP 技术的选型以及实践、在大规模分布式数据库自动化运维的优化实践、TiDB 在微众银行的未来规划。
2023-05-01 10:47:55
26
原创 TiCDC 源码阅读(三)TiCDC 集群工作过程解析
以上就是本文的全部内容。TiCDC Server 启动,创建 Changefeed 和 ETCD 的交互过程。EtcdWorker 如何读取 ETCD 数据并且驱动 Owner 和 Processor Manager 运行。TiCDC Owner 的竞选和切换过程。
2023-05-01 10:47:25
10
原创 方案精讲丨TiDB 多业务融合方案(上)
cgroups 是 Linux 内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,可以对 cpu,内存等资源实现精细化的控制。容器 Docker 就使用了 cgroups 提供的资源限制能力来完成cpu,内存等部分的资源控制。TiDB 可以很简单在 TiUP 配置文件中与 cgroup 结合使用。实现对应 TiDB / TiKV 等实例只使用受 cgroup 控制的资源总量,实现单机不同进程之间 CPU 和 Memory 隔离。为需要的 TiDB 和 TiKV实例分别添加以下配置。
2023-05-01 10:46:08
36
原创 同盾科技 x TiDB丨实时数据架构为风控智能决策保驾护航
同盾科技是中国领先的人工智能科技企业。为了确保服务的低延迟和高可用性,同盾的技术团队不断寻找最佳的技术架构。经过长时间调研,他们最终选择了新一代分布式数据库 TiDB 作为离线层的核心数据库,。同盾科技是中国领先的人工智能科技企业,专注决策智能领域,致力于帮助政企客户防范风险、提升决策效率。
2023-05-01 10:45:43
17
原创 TiCDC MQ 吞吐性能提升报告
在测试中发现,这种情况下 Sink 的吞吐量只有 5k/s 左右,这说明数据流入 Sink 的速率不足,也就说明了 Mounter 模块的吞吐量不足,是必须优先解决的性能瓶颈。上述两个优化工作完成之后,KV-Client 和 Puller 模块应对海量 Region 时的 CPU 开销有明显的下降,这也使得 TiCDC 能够更加高效地应对有大量 Region 的场景,在相同资源的情况下,支持比以前更大规模的数据量。为了定位上述场景下系统的性能瓶颈,我们做了一系列的压力测试和性能分析。
2023-05-01 10:44:32
11
原创 LiveMe x TiDB丨单表数据量 39 亿条,简化架构新体验
近些年,由于互联网的快速发展以及线上需求的爆发,。在娱乐、教育、办公等场景中涌现出许多优秀的视频直播产品。随着国内市场竞争日益白热化,加之企业出海渐成趋势,越来越多的直播公司选择走出去,寻找新的海外直播市场,借鉴国内成熟的产品、运营以及商业模式,让全球的用户都用上中国人创造的产品,LiveMe 便是成功的出海直播产品之一。LiveMe 是一个全球直播和社交平台,于 2016 年 4 月推出。
2023-05-01 10:43:41
17
原创 TiCDC 源码阅读(二)TiKV CDC 模块介绍
我们需要定义完整是什么。在这里,“完整”的主体是 TiDB 中的事务,我们知道 TiDB 的事务会有两个写入事件,第一个是 prewrite,第二是 commit 或者 rollback。同时,TiDB 事务可能会涉及多个 key,这些有可能分布在不同的 region 上。所以,我们说“完整”地捕捉一个事务需要捕捉它涉及的所有的 key和所有的写入事件。上图描绘了一个涉及了三个 key 的事务,P 代表事务的 prewrite,C 代表事务的 commit,虚线代表一次捕捉。
2023-05-01 10:42:57
16
原创 数益工联 x TiDB丨如何运用 HTAP 挖掘工业数据价值?
制造业是一个古老而悠久的行业,它的起源最早可追溯到石器时代。从新石器时代简单的工具,到今天复杂的智能工厂,制造业历经千年发展,蜕变成了由技术驱动的创新行业,充满各种自动化流程、始终互连的设备和数据丰富的流程。本文将以数益工联数字化工厂为例,介绍“离散型”制造业面临的数据挑战,以及分布式 HTAP 数据库 TiDB 如何助力工业数据价值的挖掘。
2023-05-01 10:42:27
61
原创 TiCDC 源码阅读(一)TiCDC 架构概览
这一次 TiCDC 阅读系列文章将会从源码层面来讲解 TiCDC 的基本原理,希望能够帮助读者深入地了解 TiCDC。本篇文章是这一系列文章的第一期,主要叙述了 TiCDC 的目的、架构和数据同步链路,旨在让读者能够初步了解 TiCDC,为阅读其他源码阅读文章起到一个引子的作用。
2023-05-01 10:41:21
20
原创 案例故事丨老虎国际 x TiDB ,降低架构复杂性,保障全球用户安全可靠投资
券商是一个古老的行业,发展至今已经历了三个时代:第一代券商为传统券商,在线下交易大厅进行买卖;第二代券商开始了电子化进程,从线下到线上进行了浅层服务的转移,改善了用户体验,提高了金融服务的效率;老虎国际作为第三代券商的代表,是一家全球知名的国际化券商,在新加坡、美国、中国香港、澳大利亚等地持有 59 张牌照或资质,在全球多地开展业务。投资者在老虎国际可通过一个账户交易美股、港股、A 股(沪港通/深港通)、星股(新加坡股)、澳股(澳大利亚股)、期货、基金等全球主要市场的金融产品,享受一流的投资体验。
2023-04-30 22:08:14
29
原创 TiKV 源码阅读三部曲(三)写流程
在三副本情况下,该 PreWrite 请求会存在于本次 ready 需要持久化的日志和需要发往其他两个 peer 的 message 中,对于 message,一旦收到就会 spawn 给 Transport 让其异步发送,对于持久化,在不开启 async-io 的情况下,数据会被暂存到内存中在当前 loop 结尾的 end 函数中实际写入到底层引擎中去。中,值得一提的是,在写入缓存之前会首先判断是否能够进行一次提交,如果可以则需要在写入缓存之前将这一批日志提交到底层引擎。
2023-04-30 22:07:53
24
原创 TiKV 源码阅读三部曲(二)读流程
是一个支持事务的分布式 Key-Value 数据库,目前已经是的顶级项目。作为一个新同学,需要一定的前期准备才能够有能力参与 TiKV 社区的代码开发,包括但不限于学习 Rust 语言,理解 TiKV 的原理和在前两者的基础上了解熟悉 TiKV 的源码。详细地介绍了 TiKV 3.x 版本重要模块的设计要点,主要流程和相应代码片段,是学习 TiKV 源码必读的学习资料。
2023-04-30 22:06:30
17
原创 TiKV 源码阅读三部曲(一)重要模块
是一个支持事务的分布式 Key-Value 数据库,目前已经是的顶级项目。作为一个新同学,需要一定的前期准备才能够有能力参与 TiKV 社区的代码开发,包括但不限于学习 Rust 语言,理解 TiKV 的原理和在前两者的基础上了解熟悉 TiKV 的源码。详细地介绍了 TiKV 3.x 版本重要模块的设计要点,主要流程和相应代码片段,是学习 TiKV 源码必读的学习资料。
2023-04-30 22:05:37
35
原创 TiDB 分布式数据库在保险行业关键应用场景的探索与实践
新一代的开源已经不是互联网公司自己家里的开源,而是每一个场景用户都在用的开源。对于所有面向客户经营的业务和面向业务人员的客户,他们希望有一个一栈式的技术栈,既解决实时交易,又能分析业务,这相当于是一个数据的“任意门”,这边做保险的核心交易,同时在另一边又能看到数据大屏和评估可能的业务风险。众所周知,数据库市场有很多流派,很多品牌的数据库是一个品牌的名字,在一个品牌下面又有很多的技术栈,对于大多数客户而言,数据库用起来通常都很复杂,往往一个项目涉及 N 多产品的集成,那么能不能有一个简单而强大的数据库呢?
2023-04-30 22:04:17
25
原创 多元生态|云和恩墨 zCloud 最新支持 TiDB,助力可管理性提升
对于企业级和云数据库,除了性能,可用性和功能等常规维度外,一个重要维度就是可管理性。除了提供必备的「硬」能力以完成用户的技术及业务目标,是否「好用」,是用户做选择时的重要考量,可管理性维度也会很深地影响用户实际使用数据库的隐性成本。TiDB 6.0 版本以来,通过 TiUniManager(原 TiEM)、Clinic 服务等新功能,可管理性大大提升。与此同时,TiDB 的开源也使得更多生态伙伴加入到了产品体验的优化中。
2023-04-30 22:03:33
18
原创 TiFlash 源码阅读(九)TiFlash 中常用算子的设计与实现
在 TiFlash 节点中,需要首先解析这些执行计划,这个过程我们称作“编译”,编译的结果是 BlockInputStream,它是 TiFlash 中的可执行结构;与之相对的则是 “any” join,表示半连接,无需返回右表,只需返回左表的数据,则无需使用 replicate_offsets 这个辅助数组,读者可以自行阅读代码。优化器会遍历所有可选择的计划路径,包括含有 MPP 算法的计划与不含有 MPP 算法的计划,估计它们的代价,并选择其中总代价最小的一个查询计划。
2023-04-30 22:03:02
9
原创 TiFlash 源码阅读(八)TiFlash 表达式的实现与设计
但是从 TiDB 获得的 Column Expression 计算得出的并不是 Column 在 Block 中的 Column Name,而是 Column 在 TiDB Schema 中的下标。下图是 MySQL 8.0 Parser 的语法规则简图,里面大号粗体的是算子标识符,后面跟着的小号字段是归属这个算子的表达式。算子内部的表达式都可以下推执行,是算子下推的必要条件。在 TiDB HTAP 的体系里,TiFlash 的表达式是由 TiDB 下推给 TiFlash 执行的。
2023-04-30 22:01:58
12
原创 TiFlash 源码阅读(七)TiFlash Proxy 模块
在前面的介绍中,大家应该对 TiFlash 如何存储、计算有了一定的了解。那么今天我们主要讲解一下 TiFlash 如何被添加副本,以及获得数据的。如何对一张表添加一个 TiFlash 副本呢?是通过下面的指令也就是说,此时这张表对应的数据已经在集群中的 TiKV 上被存储了,我们实际上需要的是将数据从 TiKV 导入到 TiFlash 的存储中。有很多方案可以做到这一点,我们有一个很棒的产品 TiCDC,指定 TSO,它可以捕捉 TiKV ChangeLog,并将 TSO 时刻对应的状态同步到下游支持 M
2023-04-30 22:00:15
14
原创 TiFlash 源码阅读(六)DeltaTree Index 的设计和实现分析
TiFlash 存储层的数据是按表分开存储的,每张表的数据会根据 Handle Range 切分为多个 Segment,每个 Segment 包含 Stable 层和 Delta 层,其中 Segment 的大部分数据存储在 Stable 层,Delta 层只负责处理少部分新写入的数据,并且在写入数据达到一定阈值后会将 Delta 层的数据合并到 Stable 层。
2023-04-30 21:59:11
9
原创 TiSpark 原理之下推
TiSpark 是 PingCAP 为解决用户复杂 OLAP 需求而推出的产品。它通过 Spark 提供的拓展机制与内置的 TiKV Client Java,在 Spark 之上直连 TiKV 进行读写,具有事务性读取、事务性写入与删除等能力。其中在事务性读取中基于 Spark Extension 实现了下推(详情可见。
2023-04-29 12:20:18
17
IATF16949-2016标准完整版 -汽车生产件及相关服务件组织的质量管理体系要求.pdf
2023-05-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人