Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
4c693d5d
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看板
提交
4c693d5d
编写于
6月 25, 2022
作者:
D
dingbo
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs: high volume example
上级
ef8187c5
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
166 addition
and
5 deletion
+166
-5
docs/examples/java/src/main/java/com/taos/example/FastWriteExample.java
...java/src/main/java/com/taos/example/FastWriteExample.java
+161
-0
docs/zh/07-develop/03-insert-data/05-high-volume.md
docs/zh/07-develop/03-insert-data/05-high-volume.md
+5
-5
未找到文件。
docs/examples/java/src/main/java/com/taos/example/FastWriteExample.java
0 → 100644
浏览文件 @
4c693d5d
package
com.taos.example
;
import
java.sql.Connection
;
import
java.sql.DriverManager
;
import
java.sql.SQLException
;
import
java.sql.Statement
;
import
java.util.ArrayList
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.concurrent.BlockingQueue
;
import
java.util.concurrent.LinkedBlockingDeque
;
class
ReadTask
{
private
final
int
taskId
;
private
Thread
readThread
;
private
List
<
WriteTask
>
writeTasks
;
public
ReadTask
(
int
readTaskId
,
List
<
WriteTask
>
writeTasks
)
{
this
.
taskId
=
readTaskId
;
this
.
writeTasks
=
writeTasks
;
this
.
readThread
=
new
Thread
(
this
::
doReadTask
);
}
/**
* Simulate getting data from datasource.
*/
private
Iterator
<
String
>
getSourceDataIterator
()
{
long
now
=
System
.
currentTimeMillis
();
int
tableCount
=
1000
;
int
numberRows
=
10
^
7
;
int
tsStep
=
100
;
// 100 milliseconds
String
tbNamePrefix
=
"tb"
+
taskId
+
"-"
;
return
new
Iterator
<
String
>()
{
private
long
ts
=
now
-
numberRows
*
tsStep
;
private
int
tbId
=
0
;
@Override
public
boolean
hasNext
()
{
return
ts
<
now
;
}
@Override
public
String
next
()
{
if
(
tbId
<
tableCount
)
{
tbId
+=
1
;
}
else
{
ts
+=
tsStep
;
tbId
=
0
;
}
StringBuilder
sb
=
new
StringBuilder
(
tbNamePrefix
+
tbId
+
","
);
// tbName
sb
.
append
(
ts
).
append
(
','
);
// ts
sb
.
append
(
1.0
).
append
(
','
);
// current
sb
.
append
(
110
).
append
(
','
);
// voltage
sb
.
append
(
0.32
).
append
(
','
);
// phase
sb
.
append
(
3
).
append
(
','
);
// groupID
sb
.
append
(
"Los Angeles"
);
// location
return
sb
.
toString
();
}
};
}
/**
* Read lines from datasource. And assign each line to a writing task according the table name.
*/
private
void
doReadTask
()
{
int
numberWriteTask
=
writeTasks
.
size
();
Iterator
<
String
>
it
=
getSourceDataIterator
();
try
{
while
(
it
.
hasNext
())
{
String
line
=
it
.
next
();
String
tbName
=
line
.
substring
(
0
,
line
.
indexOf
(
','
));
int
writeTaskId
=
tbName
.
hashCode
()
%
numberWriteTask
;
writeTasks
.
get
(
writeTaskId
).
put
(
line
);
}
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
/**
* start reading thread
*/
public
void
start
()
{
this
.
readThread
.
start
();
}
}
class
WriteTask
{
final
static
int
maxBachSize
=
500
;
final
static
int
taskQueueCapacity
=
1000
;
private
Thread
writeThread
=
new
Thread
(
this
::
doWriteTask
);
private
BlockingQueue
<
String
>
queue
=
new
LinkedBlockingDeque
<>(
taskQueueCapacity
);
public
void
put
(
String
line
)
throws
InterruptedException
{
queue
.
put
(
line
);
}
private
static
Connection
getConnection
()
throws
SQLException
{
String
jdbcUrl
=
"jdbc:TAOS-RS://localhost:6041?user=root&password=taosdata"
;
return
DriverManager
.
getConnection
(
jdbcUrl
);
}
public
void
doWriteTask
()
{
try
{
Connection
conn
=
getConnection
();
Statement
stmt
=
conn
.
createStatement
();
while
(
true
)
{
String
line
=
queue
.
poll
();
if
(
line
!=
null
)
{
}
else
{
Thread
.
sleep
(
1
);
}
}
}
catch
(
Exception
e
)
{
// handle exception
}
}
/**
* start writing thread
*/
public
void
start
()
{
writeThread
.
start
();
}
}
public
class
FastWriteExample
{
final
static
int
readTaskCount
=
1
;
final
static
int
writeTaskCount
=
4
;
final
static
List
<
ReadTask
>
readTasks
=
new
ArrayList
<>();
final
static
List
<
WriteTask
>
writeTasks
=
new
ArrayList
<>();
public
static
void
main
(
String
[]
args
)
throws
InterruptedException
{
// Create write tasks
for
(
int
i
=
0
;
i
<
writeTaskCount
;
++
i
)
{
WriteTask
task
=
new
WriteTask
();
task
.
start
();
writeTasks
.
add
(
new
WriteTask
());
}
// Create read tasks
for
(
int
i
=
0
;
i
<
readTaskCount
;
++
i
)
{
ReadTask
task
=
new
ReadTask
(
i
,
writeTasks
);
task
.
start
();
readTasks
.
add
(
task
);
}
while
(
true
)
{
Thread
.
sleep
(
1000
);
}
}
}
docs/zh/07-develop/03-insert-data/05-high-volume.md
浏览文件 @
4c693d5d
...
...
@@ -6,7 +6,7 @@ title: 高效写入
本节介绍如何高效地向 TDengine 写入数据。高效写入数据要考虑几个因素:数据在不同表(或子表)之间的分布,即要写入数据的相邻性;单次写入的数据量;并发连接数。一般来说,每批次只向同一张表(或子表)写入数据比向多张表(或子表)写入数据要更高效;每批次写入的数据量越大越高效(但超过一定阈值其优势会消失);同时写入数据的并发连接数越多写入越高效(但超过一定阈值反而会下降,取决于服务端处理能力)。
为了更高效地向 TDengine 写入数据,客户端程序要充分且恰当地利用以上几个因素。在单次写入中尽量只向同一张表(或子表)写入数据,每批次写入的数据量经过测试和调优设定为一个最适合当前系统处理能力的数值,并发写入的连接数同样经过测试和调优后设定为一个最适合当前系统处理能力的数值,以实现在当前系统中的最佳写入速度。同时,TDe
gn
ine 还提供了独特的参数绑定写入,这也是一个有助于实现高效写入的方法。
为了更高效地向 TDengine 写入数据,客户端程序要充分且恰当地利用以上几个因素。在单次写入中尽量只向同一张表(或子表)写入数据,每批次写入的数据量经过测试和调优设定为一个最适合当前系统处理能力的数值,并发写入的连接数同样经过测试和调优后设定为一个最适合当前系统处理能力的数值,以实现在当前系统中的最佳写入速度。同时,TDe
ng
ine 还提供了独特的参数绑定写入,这也是一个有助于实现高效写入的方法。
## 高效写入方案
...
...
@@ -21,14 +21,14 @@ title: 高效写入
在 Java 示例程序中采用拼接 SQL 的写入方式。
```
java t
ext=Java 示例程序
##include{
}
```
java t
itle="Java 示例程序"
{{#include docs/examples/java/src/main/java/com/taos/example/FastWriteExample.java}
}
```
## Python 示例程序
在 Python 示例程序中采用参数绑定的写入方式。
```
python t
est=Python 示例程序
##include{}
```
python t
itle="Python 示例程序"
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录