Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
a46e2c3d
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
a46e2c3d
编写于
7月 13, 2022
作者:
W
wade zhang
提交者:
GitHub
7月 13, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #14838 from taosdata/docs/python-example
docs: add titles
上级
2300710d
707e51b5
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
24 addition
and
24 deletion
+24
-24
docs/zh/07-develop/03-insert-data/05-high-volume.md
docs/zh/07-develop/03-insert-data/05-high-volume.md
+24
-24
未找到文件。
docs/zh/07-develop/03-insert-data/05-high-volume.md
浏览文件 @
a46e2c3d
...
...
@@ -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: 高效写入
</details>
### 写任务的实现
### 写任务的实现
{#java-demo-write}
<details>
<summary>
写任务的实现
</summary>
...
...
@@ -83,7 +83,7 @@ title: 高效写入
</details>
### SQLWriter 类的实现
### SQLWriter 类的实现
{#java-demo-sql-writer}
SQLWriter 类封装了拼 SQL 和写数据的逻辑。注意,所有的表都没有提前创建,而是写入出错的时候,再以超级表为模板批量建表,然后重新执行 INSERT 语句。
...
...
@@ -96,7 +96,7 @@ SQLWriter 类封装了拼 SQL 和写数据的逻辑。注意,所有的表都
</details>
### 执行示例程序
### 执行示例程序
{#run-java-demo}
<details>
<summary>
执行 Java 示例程序
</summary>
...
...
@@ -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"
</details>
## 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
<details>
...
...
@@ -225,9 +225,9 @@ main 函数可以接收 5 个启动参数,依次是:
</details>
### 读进程
### 读进程
{#python-read-process}
#### 读进程主要逻辑
#### 读进程主要逻辑
{#python-run-read-task}
读进程,负责从其它数据系统读数据,并分发数据到各个写进程。
...
...
@@ -241,7 +241,7 @@ main 函数可以接收 5 个启动参数,依次是:
</details>
#### 模拟数据源
#### 模拟数据源
{#python-mock-data-source}
以下是模拟数据源的实现,我们假设数据源生成的每一条数据都带有目标表名信息。实际中你可能需要一定的规则确定目标表名。
...
...
@@ -254,7 +254,7 @@ main 函数可以接收 5 个启动参数,依次是:
</details>
### 写进程
### 写进程
{#python-write-process}
写进程每次从队列中取出尽量多的数据,并批量写入。
...
...
@@ -264,12 +264,12 @@ main 函数可以接收 5 个启动参数,依次是:
```
python
{{
#include docs/examples/python/highvolume_faster_queue.py:write}}
```
</details>
### SQLWriter 类的实现
### SQLWriter 类的实现
{#python-sql-writer}
SQLWriter 类封装了拼 SQL 和写数据的逻辑。所有的表都没有提前创建,而是写入出错的时候,再以超级表为模板批量建表,然后重新执行 INSERT 语句。这个类也对 SQL 是否超过最大长度限制做了检查,如果接近 SQL 最大长度限制(maxSQLLength),将会立即执行 SQL。为了减少 SQL 此时,建议将 maxSQLLength 适当调大。
</details>
<details>
<summary>
SQLWriter
</summary>
...
...
@@ -280,7 +280,7 @@ SQLWriter 类封装了拼 SQL 和写数据的逻辑。所有的表都没有提
</details>
### 执行示例程序
### 执行示例程序
{#run-python-demo}
<details>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录