diff --git a/docs/zh/07-develop/03-insert-data/05-high-volume.md b/docs/zh/07-develop/03-insert-data/05-high-volume.md
index c490b9f7639df63ef5b8b5172824642e57a9d8a0..e20dac13be6fb1b65633ff3b431f3d25562bc523 100644
--- a/docs/zh/07-develop/03-insert-data/05-high-volume.md
+++ b/docs/zh/07-develop/03-insert-data/05-high-volume.md
@@ -2,7 +2,7 @@
title: 高效写入
---
-## 高效写入原理
+## 高效写入原理 {#principle}
本节介绍如何高效地向 TDengine 写入数据。高效写入数据要考虑几个因素:数据在不同表(或子表)之间的分布,即要写入数据的相邻性;单次写入的数据量;并发连接数。一般来说,每批次只向同一张表(或子表)写入数据比向多张表(或子表)写入数据要更高效;每批次写入的数据量越大越高效(但超过一定阈值其优势会消失;同时写入数据的并发连接数越多写入越高效(但超过一定阈值反而会下降,取决于服务端处理能力)。
@@ -10,7 +10,7 @@ title: 高效写入
为了使写入最高效,除了客户端程序的设计,服务端的配置也很重要。如果无论怎么调节客户端程序,taosd 进程的 CPU 使用率都很低,那很可能需要增加 vgroup 的数量。比如:数据库总表数是 1000 且 minTablesPerVnode 设置的也是 1000,那么这个数据至多有一个 vgroup。此时如果将 minTablesPerVnode 和 tablelncStepPerVnode 都设置成 100, 则这个数据库有可能用到 10 个 vgroup。更多性能调优参数请参考[配置参考](../../reference/config)性能调优部分。
-## 高效写入方案
+## 高效写入方案 {#scenario}
下面的示例程序展示了如何高效写入数据:
@@ -25,11 +25,11 @@ title: 高效写入
上图所示架构,每个写任务只负责写特定的表,体现了数据的相邻性原则。但是读任务所读的表,我们假设是随机的。这样一个队列有多个写入线程(或进程),队列内部可能产生锁的消耗。实际场景,如果能做到一个读任务对应一个写任务是最好的。
:::
-## Java 示例程序
+## Java 示例程序 {#java-demo}
在 Java 示例程序中采用拼接 SQL 的写入方式。
-### 主程序
+### 主程序 {#java-demo-main}
主程序负责:
@@ -57,7 +57,7 @@ title: 高效写入
队列容量(taskQueueCapacity)也是与性能有关的参数,可通过修改程序调节。一般来讲,队列容量越大,入队被阻塞的概率越小,队列的吞吐量越大,但是内存占用也会越大。
-### 读任务的实现
+### 读任务的实现 {#java-demo-read}
读任务负责从数据源读数据。每个读任务都关联了一个模拟数据源。每个模拟数据源可生成一点数量表的数据。不同的模拟数据源生成不同表的数据。
@@ -72,7 +72,7 @@ title: 高效写入
-### 写任务的实现
+### 写任务的实现 {#java-demo-write}
写任务的实现
@@ -83,7 +83,7 @@ title: 高效写入
-### SQLWriter 类的实现
+### SQLWriter 类的实现 {#java-demo-sql-writer}
SQLWriter 类封装了拼 SQL 和写数据的逻辑。注意,所有的表都没有提前创建,而是写入出错的时候,再以超级表为模板批量建表,然后重新执行 INSERT 语句。
@@ -96,7 +96,7 @@ SQLWriter 类封装了拼 SQL 和写数据的逻辑。注意,所有的表都
-### 执行示例程序
+### 执行示例程序 {#run-java-demo}
执行 Java 示例程序
@@ -108,7 +108,7 @@ SQLWriter 类封装了拼 SQL 和写数据的逻辑。注意,所有的表都
TDENGINE_JDBC_URL="jdbc:TAOS://localhost:6030?user=root&password=taosdata"
```
-#### 本地集成开发环境执行示例程序
+#### 本地集成开发环境执行示例程序 {#java-demo-local-run}
1. clone TDengine 仓库
```
@@ -118,7 +118,7 @@ TDENGINE_JDBC_URL="jdbc:TAOS://localhost:6030?user=root&password=taosdata"
3. 在开发环境中配置环境变量 `TDENGINE_JDBC_URL`。如果已配置了全局的环境变量 `TDENGINE_JDBC_URL` 可跳过这一步。
4. 运行类 `com.taos.example.highvolume.FastWriteExample`。
-#### 远程服务器上执行示例程序
+#### 远程服务器上执行示例程序 {#java-demo-remote-run}
若要在服务器上执行示例程序,可按照下面的步骤操作:
@@ -183,10 +183,10 @@ TDENGINE_JDBC_URL="jdbc:TAOS://localhost:6030?user=root&password=taosdata"
-## Python 示例程序
+## Python 示例程序 {#python-demo}
该 Python 示例程序中采用了多进程的架构,并使用了跨进程的队列通信。写任务采用拼装 SQL 的方式写入。
-### main 函数
+### main 函数 {#python-demo-main}
main 函数负责创建消息队列和启动子进程,子进程有 3 类:
@@ -196,11 +196,11 @@ main 函数负责创建消息队列和启动子进程,子进程有 3 类:
main 函数可以接收 5 个启动参数,依次是:
-1. 读任务(进程)数
-2. 写任务(进程)数
-3. 总表数据
-4. 队列大小(单位字节)
-5. 每批最多写入记录数量
+1. 读任务(进程)数, 默认为 1
+2. 写任务(进程)数, 默认为 1
+3. 总表数据,默认为 1000
+4. 队列大小(单位字节),默认为 1000000
+5. 每批最多写入记录数量, 默认为 3000
@@ -225,9 +225,9 @@ main 函数可以接收 5 个启动参数,依次是:
-### 读进程
+### 读进程 {#python-read-process}
-#### 读进程主要逻辑
+#### 读进程主要逻辑 {#python-run-read-task}
读进程,负责从其它数据系统读数据,并分发数据到各个写进程。
@@ -241,7 +241,7 @@ main 函数可以接收 5 个启动参数,依次是:
-#### 模拟数据源
+#### 模拟数据源 {#python-mock-data-source}
以下是模拟数据源的实现,我们假设数据源生成的每一条数据都带有目标表名信息。实际中你可能需要一定的规则确定目标表名。
@@ -254,7 +254,7 @@ main 函数可以接收 5 个启动参数,依次是:
-### 写进程
+### 写进程 {#python-write-process}
写进程每次从队列中取出尽量多的数据,并批量写入。
@@ -264,12 +264,12 @@ main 函数可以接收 5 个启动参数,依次是:
```python
{{#include docs/examples/python/highvolume_faster_queue.py:write}}
```
+
-### SQLWriter 类的实现
+### SQLWriter 类的实现 {#python-sql-writer}
SQLWriter 类封装了拼 SQL 和写数据的逻辑。所有的表都没有提前创建,而是写入出错的时候,再以超级表为模板批量建表,然后重新执行 INSERT 语句。这个类也对 SQL 是否超过最大长度限制做了检查,如果接近 SQL 最大长度限制(maxSQLLength),将会立即执行 SQL。为了减少 SQL 此时,建议将 maxSQLLength 适当调大。
-
SQLWriter
@@ -280,7 +280,7 @@ SQLWriter 类封装了拼 SQL 和写数据的逻辑。所有的表都没有提
-### 执行示例程序
+### 执行示例程序 {#run-python-demo}