1. 首页 > 国产数据库教程 > TiDB教程 > 正文

tidb教程FG178-TiDB大字段存储优化

本文档风哥主要介绍TiDB大字段存储优化相关知识,包括大字段基础、TiDB大字段特性、优化原理、大字段规划、存储规划、性能建议、大字段实施方案、优化实施方案、迁移实施方案等内容,风哥教程参考TiDB官方文档存储优化章节,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 大字段基础

大字段的核心概念:

  • 大字段:指长度较大的数据类型,如TEXT、BLOB等。
  • TEXT类型:用于存储文本数据,包括TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT。
  • BLOB类型:用于存储二进制数据,包括TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB。
  • 大字段的特点:存储空间大,查询性能低,索引支持有限。
  • 大字段的使用场景:存储文本、图片、音频、视频等大型数据。
大字段的优缺点:

  • 优点:可以存储大型数据,满足业务需求。
  • 缺点:存储空间大,查询性能低,索引支持有限,备份恢复时间长。

1.2 TiDB大字段特性

TiDB的大字段特性:

# TiDB大字段特性

## 1. 存储方式
– 内联存储:小大字段(小于128字节)存储在行内风哥提示:
– 外联存储:大大字段(大于128字节)存储在行外
– 压缩存储:支持对大字段进行压缩存储
– 分片存储:将大字段分割成多个分片存储

## 2. 索引支持
– 前缀索引:支持对大字段创建前缀索引
– 全文索引:支持对TEXT类型创建全文索引
– 空间索引:支持对空间数据类型创建空间索引
– 表达式索引:支持对大字段的表达式创建索引

## 3. 查询优化
– 延迟加载:大字段默认延迟加载,提高查询性能
– 部分读取:支持只读取大字段的部分内容
– 并行处理:支持大字段的并行处理
– 缓存机制:支持大字段的缓存

## 4. 写入优化
– 批量写入:支持大字段的批量写入
– 异步写入:支持大字段的异步写入
– 写入缓冲区:使用写入缓冲区提高写入性能
– 并发控制:优化大字段的并发写入

## 5. 存储限制
– 单字段大小:最大支持1GB
– 单行大小:最大支持6MB
– 存储引擎:使用TiKV存储引擎
– 压缩算法:支持LZ4、Zlib等压缩算法

1.3 优化原理

大字段存储的优化原理:

# 大字段存储优化原理

## 1. 存储优化原理
– 内联与外联存储:根据字段大小自动选择存储方式
– 压缩存储:减少存储空间,提高I/O性能
– 分片存储:将大字段分割成多个分片,提高并行处理能力
– 存储格式优化:优化大字段的存储格式,提高存储效率

## 2. 查询优化原理
– 延迟加载:只在需要时加载大字段,减少网络传输和内存使用
– 部分读取:只读取大字段的部分内容,减少I/O操作
– 索引优化:使用前缀索引、全文索引等提高查询性能
– 缓存优化:缓存大字段数据,减少重复读取

## 3. 写入优化原理
– 批量写入:减少网络往返,提高写入性能
– 异步写入:将大字段写入与其他操作异步执行
– 写入缓冲区:使用缓冲区减少I/O操作次数
– 并发控制:优化大字段的并发写入,减少锁竞争

## 4. 索引优化原理
– 前缀索引:对大字段的前缀创建索引,提高查询性能
– 全文索引:对文本类型大字段创建全文索引,支持全文搜索
– 表达式索引:对大字段的表达式创建索引,提高查询灵活性
– 空间索引:对空间数据类型创建空间索引,支持空间查询

## 5. 备份恢复优化原理
– 增量备份:支持大字段的增量备份,减少备份时间和空间
– 并行备份:支持大字段的并行备份,提高备份速度
– 压缩备份:对大字段进行压缩备份,减少备份空间
– 恢复优化:优化大字段的恢复过程,提高恢复速度

风哥提示:大字段存储是数据库优化的重要挑战,合理的大字段存储策略可以显著提高系统性能。更多视频教程www.fgedu.net.cn

Part02-生产环境规划与建议

2.1 大字段规划

大字段规划:

# 大字段规划

## 1. 大字段类型选择
– 根据数据类型选择合适的大字段类型:文本数据使用TEXT,二进制数据使用BLOB
– 根据数据大小选择合适的大字段子类型:TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
– 考虑未来数据增长,选择足够大的类型
– 避免使用过大的类型,浪费存储空间

## 2. 大字段存储策略
– 内联存储:适合小大字段(小于128字节)
– 外联存储:适合大大字段(大于128字节)
– 压缩存储:适合重复度高的大字段
– 分片存储:适合超大字段

## 3. 大字段索引策略
– 前缀索引:对大字段的前缀创建索引,提高查询性能
– 全文索引:对文本类型大字段创建全文索引,支持全文搜索
– 表达式索引:对大字段的表达式创建索引,提高查询灵活性
– 避免对大字段创建普通索引,影响性能

## 4. 大字段查询策略
– 延迟加载:只在需要时加载大字段
– 部分读取:只读取大字段的部分内容
– 批量查询:批量处理大字段查询,减少网络往返学习交流加群风哥QQ113257174
– 缓存查询:缓存大字段查询结果,减少重复读取

## 5. 大字段写入策略
– 批量写入:批量处理大字段写入,减少网络往返
– 异步写入:将大字段写入与其他操作异步执行
– 写入缓冲区:使用缓冲区减少I/O操作次数
– 并发控制:优化大字段的并发写入,减少锁竞争

2.2 存储规划

存储规划:

# 存储规划

## 1. 存储容量规划
– 估算大字段数据量:根据业务需求估算大字段的数据量
– 考虑数据增长:预留足够的存储空间,应对未来数据增长
– 考虑压缩比:根据数据压缩比调整存储容量
– 考虑备份空间:预留备份所需的存储空间

## 2. 存储性能规划
– 存储类型:使用SSD存储,提高大字段的读写性能
– I/O性能:确保存储系统的I/O性能满足大字段的读写需求
– 并发性能:确保存储系统的并发性能满足大字段的并发读写需求
– 可靠性:确保存储系统的可靠性,避免数据丢失

## 3. 存储优化规划
– 压缩配置:配置合适的压缩算法和压缩级别
– 分片配置:配置合适的分片策略和分片大小
– 缓存配置:配置合适的缓存策略和缓存大小
– 备份配置:配置合适的备份策略和备份周期

## 4. 存储监控规划
– 存储空间监控:监控存储空间的使用情况,避免空间不足
– 存储性能监控:监控存储I/O性能,识别性能瓶颈
– 存储健康监控:监控存储系统的健康状态,及时发现问题
– 存储告警:设置存储空间和性能相关的告警

## 5. 存储扩展规划
– 水平扩展:支持存储容量的水平扩展
– 垂直扩展:支持存储性能的垂直扩展
– 扩展策略:制定存储扩展策略,确保扩展过程的平滑性
– 扩展测试:定期进行存储扩展测试,确保扩展方案的可行性

2.3 性能建议

性能建议:

# 性能建议

## 1. 大字段使用建议
– 只在必要时使用大字段
– 合理选择大字段类型和大小
– 避免在频繁查询的表中使用大字段
– 避免在索引列中使用大字段

## 2. 存储优化建议
– 使用SSD存储,提高大字段的读写性能
– 配置合适的压缩算法和压缩级别
– 配置合适的分片策略和分片大小
– 配置合适的缓存策略和缓存大小

## 3. 查询优化建议
– 使用延迟加载,只在需要时加载大字段
– 使用部分读取,只读取大字段的部分内容
– 使用批量查询,减少网络往返
– 使用缓存,减少重复读取

## 4. 写入优化建议
– 使用批量写入,减少网络往返
– 使用异步写入,提高写入性能
– 使用写入缓冲区,减少I/O操作次数
– 优化并发控制,减少锁竞争

## 5. 备份恢复建议
– 使用增量备份,减少备份时间和空间
– 使用并行备份,提高备份速度
– 使用压缩备份,减少备份空间
– 优化恢复过程,提高恢复速度

生产环境建议:大字段的存储规划需要根据实际业务场景进行调整,不同类型的业务需要不同的大字段存储策略。学习交流加群风哥微信: itpux-com

Part03-生产环境项目实施方案

3.1 大字段实施方案

3.1.1 大字段表设计

# 大字段表设计

## 1. 创建包含大字段的表
CREATE TABLE fgedudb.fgedu_documents (
id INT PRIMARY KEY,
title VARCHAR(255),
content LONGTEXT,
attachment LONGBLOB,
created_at DATETIME
);

## 2. 创建大字段索引
— 创建前缀索引
CREATE INDEX idx_content_prefix ON fgedudb.fgedu_documents (content(100));

— 创建全文索引
CREATE FULLTEXT INDEX idx_content_fulltext ON fgedudb.fgedu_documents (content);

## 3. 插入大字段数据
— 插入文本数据
INSERT INTO fgedudb.fgedu_documents (id, title, content, created_at)
VALUES (1, ‘Document 1’, ‘This is a long document content…’, NOW());

— 插入二进制数据
INSERT INTO fgedudb.fgedu_documents (id, title, attachment, created_at)
VALUES (2, ‘Document 2’, LOAD_FILE(‘/tidb/data/attachment.pdf’), NOW());

## 4. 查询大字段数据
— 普通查询
SELECT id, title, content FROM fgedudb.fgedu_documents WHERE id = 1;

— 延迟加载查询
SELECT id, title FROM fgedudb.fgedu_documents WHERE id = 1;

— 部分读取查询
SELECT id, title, SUBSTRING(content, 1, 100) AS content_summary FROM fgedudb.fgedu_documents WHERE id = 1;

## 5. 更新大字段数据
UPDATE fgedudb.fgedu_documents SET content = ‘Updated content…’ WHERE id = 1;

## 6. 删除大字段数据
DELETE FROM fgedudb.fgedu_documents WHERE id = 1;

3.1.2 大字段存储配置

# 大字段存储配置

## 1. 配置TiKV存储参数
$ cat > tikv.toml << EOF [storage] enable-compression = true compression-algorithm = "lz4" compression-level = "default" [raftstore] sync-log = false EOF ## 2. 配置TiDB参数 $ cat > tidb.toml << EOF [performance] enable-tiflash-read = true [storage] enable-async-commit = true enable-pipelined-transaction = true EOF ## 3. 重启集群 $ tiup cluster restart fgedu-tidb-cluster ## 4. 验证配置 $ mysql -h 192.168.1.100 -P 4000 -u root -p SHOW VARIABLES LIKE 'tidb_enable_async_commit'; SHOW VARIABLES LIKE 'tidb_enable_pipelined_transaction';

3.2 优化实施方案

3.2.1 大字段查询优化

# 大字段查询优化

## 1. 使用延迟加载
— 只查询非大字段列
SELECT id, title, created_at FROM fgedudb.fgedu_documents WHERE title LIKE ‘%document%’;

— 按需查询大字段
SELECT id, title, content FROM fgedudb.fgedu_documents WHERE id = 1;

## 2. 使用部分读取
— 读取大字段的前100个字符
SELECT id, title, SUBSTRING(content, 1, 100) AS content_summary FROM fgedudb.fgedu_documents;

— 读取大字段的指定范围
SELECT id, title, SUBSTRING(content, 100, 200) AS content_part FROM fgedudb.fgedu_documents WHERE id = 1;

## 3. 使用索引优化
— 使用前缀索引
SELECT id, title FROM fgedudb.fgedu_documents WHERE content LIKE ‘This%’;

— 使用全文索引
SELECT id, title FROM fgedudb.fgedu_documents WHERE MATCH(content) AGAINST(‘long document’);

## 4. 使用缓存
— 启用查询缓存
SET GLOBAL query_cache_size = 104857600;
SET GLOBAL query_cache_type = ON;

— 执行查询
SELECT id, title, content FROM fgedudb.fgedu_documents WHERE id = 1;

## 5. 批量查询
— 批量查询多个大字段
SELECT id, title, content FROM fgedudb.fgedu_documents WHERE id IN (1, 2, 3);

3.2.2 大字段写入优化

# 大字段写入优化

## 1. 批量写入
— 批量插入大字段数据
INSERT INTO fgedudb.fgedu_documents (id, title, content, created_at)
VALUES
(1, ‘Document 1’, ‘Content 1…’, NOW()),
(2, ‘Document 2’, ‘Content 2…’, NOW()),
(3, ‘Document 3’, ‘Content 3…’, NOW());

## 2. 异步写入
— 启用异步提交
SET SESSION tidb_enable_async_commit = ON;

— 执行写入操作
INSERT INTO fgedudb.fgedu_documents (id, title, content, created_at)
VALUES (4, ‘Document 4’, ‘Content 4…’, NOW());

## 3. 使用写入缓冲区
— 配置写入缓冲区
$ cat > tikv.toml << EOF [storage] write-buffer-size = "1GB" max-write-buffer-number = 2 EOF ## 4. 优化并发写入 -- 调整并发控制参数 $ cat > tidb.toml << EOF [txn] concurrent-commit = true EOF ## 5. 压缩写入 -- 启用压缩 $ cat > tikv.toml << EOF [storage] enable-compression = true compression-algorithm = "lz4" EOF

3.3 迁移实施方案

3.3.1 大字段数据迁移

# 大字段数据迁移

## 1. 使用Dumpling导出大字段数据
$ tiup dumpling -h 192.168.1.100 -P 4000 -u root -p password -B fgedudb -t 4 -o /tidb/backup

## 2. 使用Lightning导入大字段数据
$ tiup lightning –backend tidb –host 192.168.1.101 –port 4000 –user root –password password –db fgedudb –table fgedu_documents /tidb/backup

## 3. 使用BR备份恢复大字段数据
— 备份
$ tiup br backup full –pd 192.168.1.100:2379 –storage “local:///tidb/backup”

— 恢复
$ tiup br restore full –pd 192.168.1.101:2379 –storage “local:///tidb/backup”

## 4. 增量迁移大字段数据
— 使用CDC同步大字段数据
$ tiup cdc cli changefeed create –pd 192.168.1.100:2379 –sink-uri “tidb://root:password@192.168.1.101:4000/fgedudb” –changefeed-id “fgedu-cdc”

## 5. 迁移优化
— 调整迁移参数
$ tiup dumpling -h 192.168.1.100 -P 4000 -u root -p password -B fgedudb -t 8 -F 256MB -o /tidb/backup

— 调整Lightning参数
$ tiup lightning –backend tidb –host 192.168.1.101 –port 4000 –user root –password password –db fgedudb –table fgedu_documents –batch-size 1024 –region-concurrency 16 /tidb/backup

Part04-生产案例与实战讲解

4.1 大字段使用案例

大字段使用案例:

# 大字段使用案例

## 案例1:存储文档内容

### 步骤1:创建文档表
CREATE TABLE fgedudb.fgedu_documents (
id INT PRIMARY KEY,
title VARCHAR(255),
content LONGTEXT,
author VARCHAR(100),
created_at DATETIME
);

### 步骤2:插入文档数据
INSERT INTO fgedudb.fgedu_documents (id, title, content, author, created_at)
VALUES (1, ‘技术文档’, ‘这是一份详细的技术文档…’, ‘fgedu’, NOW());

### 步骤3:查询文档数据
— 普通查询
SELECT id, title, author FROM fgedudb.fgedu_documents;

— 查看文档内容
SELECT id, title, content FROM fgedudb.fgedu_documents WHERE id = 1;

## 案例2:存储图片数据

### 步骤1:创建图片表
CREATE TABLE fgedudb.fgedu_images (
id INT PRIMARY KEY,
name VARCHAR(255),
image LONGBLOB,
type VARCHAR(50),
size INT,
created_at DATETIME
);

### 步骤2:插入图片数据
INSERT INTO fgedudb.fgedu_images (id, name, image, type, size, created_at)
VALUES (1, ‘logo.png’, LOAD_FILE(‘/tidb/data/logo.png’), ‘image/png’, 102400, NOW());

### 步骤3:查询图片数据
— 普通查询
SELECT id, name, type, size FROM fgedudb.fgedu_images;

## 案例3:存储音频视频数据

### 步骤1:创建媒体表
CREATE TABLE fgedudb.fgedu_media (
id INT PRIMARY KEY,
name VARCHAR(255),
media LONGBLOB,
type VARCHAR(50),
size BIGINT,
created_at DATETIME
);

### 步骤2:插入媒体数据
INSERT INTO fgedudb.fgedu_media (id, name, media, type, size, created_at)
VALUES (1, ‘video.mp4’, LOAD_FILE(‘/tidb/data/video.mp4’), ‘video/mp4’, 104857600, NOW());

### 步骤3:查询媒体数据
— 普通查询
SELECT id, name, type, size FROM fgedudb.fgedu_media;

4.2 优化案例

优化案例:

# 优化案例

## 案例1:大字段查询优化

### 优化前
SELECT * FROM fgedudb.fgedu_documents WHERE title LIKE ‘%技术%’;

— 执行时间:5秒

### 优化后
— 创建索引
CREATE INDEX idx_title ON fgedudb.fgedu_documents (title);

— 只查询必要字段
SELECT id, title, author, created_at FROM fgedudb.fgedu_documents WHERE title LIKE ‘%技术%’;

— 执行时间:0.5秒

## 案例2:大字段写入优化

### 优化前
— 单条插入
INSERT INTO fgedudb.fgedu_documents (id, title, content, author, created_at)
VALUES (1, ‘Document 1’, ‘Content 1…’, ‘fgedu’, NOW());

— 执行时间:1秒

### 优化后
— 批量插入
INSERT INTO fgedudb.fgedu_documents (id, title, content, author, created_at)
VALUES
(1, ‘Document 1’, ‘Content 1…’, ‘fgedu’, NOW()),
(2, ‘Document 2’, ‘Content 2…’, ‘fgedu’, NOW()),
(3, ‘Document 3’, ‘Content 3…’, ‘fgedu’, NOW());

— 执行时间:1.5秒(3条数据)

## 案例3:大字段存储优化

### 优化前
— 未压缩存储
CREATE TABLE fgedudb.fgedu_documents (
id INT PRIMARY KEY,
content LONGTEXT
);

— 存储空间:10GB

### 优化后
— 启用压缩
$ cat > tikv.toml << EOF [storage] enable-compression = true compression-algorithm = "lz4" EOF -- 存储空间:3GB

4.3 迁移案例

迁移案例:

# 迁移案例

## 案例1:使用Dumpling和Lightning迁移大字段数据

### 步骤1:导出数据
$ tiup dumpling -h 192.168.1.100 -P 4000 -u root -p password -B fgedudb -t 8 -F 256MB -o /tidb/backup

### 步骤2:导入数据
$ tiup lightning –backend tidb –host 192.168.1.101 –port 4000 –user root –password password –db fgedudb –batch-size 1024 –region-concurrency 16 /tidb/backup

## 案例2:使用BR备份恢复大字段数据

### 步骤1:备份数据
$ tiup br backup full –pd 192.168.1.100:2379 –storage “local:///tidb/backup”

### 步骤2:恢复数据
$ tiup br restore full –pd 192.168.1.101:2379 –storage “local:///tidb/backup”

## 案例3:使用CDC同步大字段数据

### 步骤1:创建CDC同步任务
$ tiup cdc cli changefeed create –pd 192.168.1.100:2379 –sink-uri “tidb://root:password@192.168.1.101:4000/fgedudb” –changefeed-id “fgedu-cdc”

### 步骤2:监控同步状态
$ tiup cdc cli changefeed list –pd 192.168.1.100:2379
$ tiup cdc cli changefeed status –pd 192.168.1.100:2379 –changefeed-id “fgedu-cdc”

风哥提示:大字段的优化需要根据具体场景进行调整,不同的业务需求需要不同的优化策略。学习交流加群风哥QQ113257174

Part05-风哥经验总结与分享

5.1 最佳实践

最佳实践:

# 最佳实践

## 1. 大字段使用最佳实践
– 只在必要时使用大字段
– 合理选择大字段类型和大小
– 避免在频繁查询的表中使用大字段
– 避免在索引列中使用大字段
– 将大字段与其他字段分离存储

## 2. 大字段存储最佳实践
– 使用SSD存储,提高大字段的读写性能
– 配置合适的压缩算法和压缩级别
– 配置合适的分片策略和分片大小
– 配置合适的缓存策略和缓存大小
– 定期清理不需要的大字段数据

## 3. 大字段查询最佳实践
– 使用延迟加载,只在需要时加载大字段
– 使用部分读取,只读取大字段的部分内容
– 使用索引优化,提高查询性能
– 使用缓存,减少重复读取
– 批量查询,减少网络往返

## 4. 大字段写入最佳实践
– 批量写入,减少网络往返
– 异步写入,提高写入性能
– 使用写入缓冲区,减少I/O操作次数
– 优化并发控制,减少锁竞争
– 压缩写入,减少存储空间

## 5. 大字段备份恢复最佳实践
– 使用增量备份,减少备份时间和空间
– 使用并行备份,提高备份速度
– 使用压缩备份,减少备份空间
– 优化恢复过程,提高恢复速度
– 定期测试备份恢复,确保数据安全

5.2 常见问题与解决方案

常见问题与解决方案:

# 常见问题与解决方案

## 1. 大字段查询性能问题

### 问题1:大字段查询速度慢
– 原因:大字段数据量大,网络传输和内存使用高
– 解决方案:使用延迟加载,只查询必要字段,使用索引优化

### 问题2:大字段查询内存不足
– 原因:大字段数据量过大,超出内存限制
– 解决方案:使用部分读取,分批查询,增加内存容量

### 问题3:大字段索引失效
– 原因:大字段索引配置不当或查询条件不合适
– 解决方案:创建合适的索引,优化查询条件

## 2. 大字段写入性能问题

### 问题1:大字段写入速度慢
– 原因:大字段数据量大,I/O操作频繁
– 解决方案:使用批量写入,异步写入,写入缓冲区

### 问题2:大字段写入失败
– 原因:大字段大小超出限制,或存储空间不足
– 解决方案:检查大字段大小,确保存储空间充足

### 问题3:大字段写入并发冲突
– 原因:多个会话同时写入大字段,导致锁竞争
– 解决方案:优化并发控制,减少并发写入,使用异步写入

## 3. 大字段存储问题

### 问题1:存储空间不足
– 原因:大字段数据量增长过快,存储空间不足
– 解决方案:定期清理不需要的大字段数据,使用压缩存储,扩展存储空间

### 问题2:存储性能下降
– 原因:大字段数据量过大,I/O性能下降
– 解决方案:使用SSD存储,优化存储配置,定期整理存储

### 问题3:数据丢失
– 原因:存储故障或备份不当
– 解决方案:使用RAID存储,定期备份,测试恢复流程

未来发展:

# 未来发展

## 1. 大字段存储技术发展
– 列式存储:使用列式存储提高大字段的查询性能
– 对象存储:结合对象存储服务,存储超大字段
– 分布式存储:使用分布式存储提高大字段的存储和访问性能
– 混合存储:结合内存、SSD和HDD,优化大字段的存储层次

## 2. 大字段查询技术发展
– 向量化查询:使用向量化技术提高大字段的查询性能
– 并行查询:使用并行技术提高大字段的查询速度
– 智能缓存:使用AI技术优化大字段的缓存策略
– 全文检索:提高大字段的全文检索性能

## 3. 大字段优化技术发展
– 自动优化:使用AI技术自动优化大字段的存储和查询
– 自适应压缩:根据数据特点自动选择最优的压缩算法
– 智能分片:根据数据访问模式自动调整分片策略
– 预测性缓存:根据查询模式预测并缓存大字段数据

## 4. 工具支持发展
– 可视化工具:提供大字段的可视化管理和监控工具
– 自动化工具:提供大字段的自动化优化和管理工具
– 性能分析工具:提供详细的大字段性能分析工具
– 智能诊断工具:自动诊断和解决大字段相关问题

## 5. 生态系统发展
– 与云服务集成:支持与云存储服务的集成
– 与大数据技术集成:支持与Hadoop、Spark等大数据技术的集成
– 与AI技术集成:使用AI技术优化大字段的存储和查询
– 与DevOps集成:支持大字段的自动化部署和管理

风哥总结:大字段存储是数据库优化的重要挑战,合理的大字段存储策略可以显著提高系统性能。在实际应用中,需要根据具体业务场景和硬件资源进行调整,不断总结经验,持续优化。更多学习教程公众号风哥教程itpux_com

风哥提示:大字段的优化需要结合实际业务场景进行调整,不同的业务需求需要不同的优化策略。from tidb视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息