diff --git a/docs/examples/java/src/main/java/com/taos/example/highvolume/SQLWriter.java b/docs/examples/java/src/main/java/com/taos/example/highvolume/SQLWriter.java index 68b759f2e44f5054d9a567050c711a3e0116d1ce..c2989acdbe3d0f56d7451ac86051a55955ce14de 100644 --- a/docs/examples/java/src/main/java/com/taos/example/highvolume/SQLWriter.java +++ b/docs/examples/java/src/main/java/com/taos/example/highvolume/SQLWriter.java @@ -154,11 +154,11 @@ public class SQLWriter { createTables(); executeSQL(sql); } else { - logger.error("Error execute SQL: {}", sql); + logger.error("Execute SQL: {}", sql); throw e; } } catch (Throwable throwable) { - logger.error("Error execute SQL: {}", sql); + logger.error("Execute SQL: {}", sql); throw throwable; } } @@ -179,7 +179,7 @@ public class SQLWriter { try { stmt.executeUpdate(sql); } catch (Throwable throwable) { - logger.error("Error execute SQL: {}", sql); + logger.error("Execute SQL: {}", sql); throw throwable; } } diff --git a/docs/examples/python/highvolume_faster_queue.py b/docs/examples/python/fast_write_example.py similarity index 100% rename from docs/examples/python/highvolume_faster_queue.py rename to docs/examples/python/fast_write_example.py diff --git a/docs/examples/python/sql_writer.py b/docs/examples/python/sql_writer.py index 886f257001e0ca16fd52224fe2fb6c76c54b4a8b..cb04f85c239af7c4801e2a5ef0483a88b21245ef 100644 --- a/docs/examples/python/sql_writer.py +++ b/docs/examples/python/sql_writer.py @@ -72,11 +72,19 @@ class SQLWriter: if error_code == 0x362 or error_code == 0x218: self.create_tables() else: + self.log.error("Execute SQL: %s", sql) raise e + except BaseException as baseException: + self.log.error("Execute SQL: %s", sql) + raise baseException def create_tables(self): sql = "CREATE TABLE " for tb in self._tb_values.keys(): tag_values = self._tb_tags[tb] sql += "IF NOT EXISTS " + tb + " USING meters TAGS " + tag_values + " " - self._conn.execute(sql) + try: + self._conn.execute(sql) + except BaseException as e: + self.log.error("Execute SQL: %s", sql) + raise e diff --git a/docs/examples/python/stmt_writer.py b/docs/examples/python/stmt_writer.py new file mode 100644 index 0000000000000000000000000000000000000000..60846b5a6491491655905008b58e6411818720fb --- /dev/null +++ b/docs/examples/python/stmt_writer.py @@ -0,0 +1,2 @@ +class StmtWriter: + pass 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 52b89e8a9b4535f18190bcaaa3a376491fce4521..dec96bf36a70ca4a863864e25b27fb8a4d1e043f 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 @@ -75,7 +75,7 @@ import TabItem from "@theme/TabItem"; | WriteTask | 从 Queue 中获取数据,组成一个 Batch,写入 TDengine | | MockDataSource | 模拟生成一定数量 meters 子表的数据 | | SQLWriter | WriteTask 依赖这个类完成 SQL 拼接、自动建表、 SQL 写入、SQL 长度检查 | -| StmtWriter | 实现参数绑定方式批量写入,暂未完成 | +| StmtWriter | 实现参数绑定方式批量写入(暂未完成) | | DataBaseMonitor | 统计写入速度,并每隔 10 秒把当前写入速度打印到控制台 | @@ -141,7 +141,7 @@ import TabItem from "@theme/TabItem"; SQLWriter -SQLWriter 类封装了拼 SQL 和写数据的逻辑。注意,所有的表都没有提前创建,而是写入出错的时候,再以超级表为模板批量建表,然后重新执行 INSERT 语句。 +SQLWriter 类封装了拼 SQL 和写数据的逻辑。注意,所有的表都没有提前创建,而是在 catch 到表不存在异常的时候,再以超级表为模板批量建表,然后重新执行 INSERT 语句。对于其它异常,这里简单地记录当时执行的 SQL 语句到日志中,你也可以记录更多线索到日志,已便排查错误和故障恢复。 ```java {{#include docs/examples/java/src/main/java/com/taos/example/highvolume/SQLWriter.java}} @@ -217,7 +217,7 @@ TDENGINE_JDBC_URL="jdbc:TAOS://localhost:6030?user=root&password=taosdata" ``` 6. 结束测试程序。测试程序不会自动结束,在获取到当前配置下稳定的写入速度后,按 CTRL + C 结束程序。 - 下面是一次实际运行的截图: + 下面是一次实际运行的日志输出,机器配置 16核 + 64G + 固态硬盘。 ``` root@vm85$ java -classpath lib/*:javaexample-1.0.jar com.taos.example.highvolume.FastWriteExample 2 12 @@ -276,6 +276,7 @@ Python 示例程序中采用了多进程的架构,并使用了跨进程的消 | MockDataSource 类 | 模拟数据源, 实现迭代器接口,每次批量返回每张表的接下来 1000 条数据 | | run_write_task 函数 | 写进程主要逻辑。每次从队列中取出尽量多的数据,并批量写入 | | SQLWriter类 | SQL 写入和自动建表 | +| StmtWriter 类 | 实现参数绑定方式批量写入(暂未完成) |
@@ -296,7 +297,7 @@ main 函数可以接收 5 个启动参数,依次是: 5. 每批最多写入记录数量, 默认为 3000 ```python -{{#include docs/examples/python/highvolume_faster_queue.py:main}} +{{#include docs/examples/python/fast_write_example.py:main}} ```
@@ -307,7 +308,7 @@ main 函数可以接收 5 个启动参数,依次是: 监控进程负责初始化数据库,并监控当前的写入速度。 ```python -{{#include docs/examples/python/highvolume_faster_queue.py:monitor}} +{{#include docs/examples/python/fast_write_example.py:monitor}} ``` @@ -319,7 +320,7 @@ main 函数可以接收 5 个启动参数,依次是: 读进程,负责从其它数据系统读数据,并分发数据到为之分配的队列。 ```python -{{#include docs/examples/python/highvolume_faster_queue.py:read}} +{{#include docs/examples/python/fast_write_example.py:read}} ``` @@ -342,14 +343,14 @@ main 函数可以接收 5 个启动参数,依次是: 写进程每次从队列中取出尽量多的数据,并批量写入。 ```python -{{#include docs/examples/python/highvolume_faster_queue.py:write}} +{{#include docs/examples/python/fast_write_example.py:write}} ```
-SQLWriter 类封装了拼 SQL 和写数据的逻辑。所有的表都没有提前创建,而是写入出错的时候,再以超级表为模板批量建表,然后重新执行 INSERT 语句。这个类也对 SQL 是否超过最大长度限制做了检查,如果接近 SQL 最大长度限制(maxSQLLength),将会立即执行 SQL。为了减少 SQL 此时,建议将 maxSQLLength 适当调大。 +SQLWriter 类封装了拼 SQL 和写数据的逻辑。所有的表都没有提前创建,而是在发生表不存在错误的时候,再以超级表为模板批量建表,然后重新执行 INSERT 语句。对于其它错误会记录当时执行的 SQL, 以便排查错误和故障恢复。这个类也对 SQL 是否超过最大长度限制做了检查,如果接近 SQL 最大长度限制(maxSQLLength),将会立即执行 SQL。为了减少 SQL 此时,建议将 maxSQLLength 适当调大。 SQLWriter @@ -377,18 +378,18 @@ SQLWriter 类封装了拼 SQL 和写数据的逻辑。所有的表都没有提 pip3 install faster-fifo ``` -3. 点击上面的“查看源码”链接复制 `highvolume_faster_queue.py` 和 `sql_writer.py` 两个文件。 +3. 点击上面的“查看源码”链接复制 `fast_write_example.py` 、 `sql_writer.py` 和 `mockdatasource.py` 三个文件。 4. 执行示例程序 ``` - python3 highvolume_faster_queue.py + python3 fast_write_example.py ``` 下面是一次实际运行的输出: ``` - root@vm85$ python3 highvolume_faster_queue.py 8 8 + root@vm85$ python3 fast_write_example.py 8 8 2022-07-14 19:13:45,869 [root] - READ_TASK_COUNT=8, WRITE_TASK_COUNT=8, TABLE_COUNT=1000, QUEUE_SIZE=1000000, MAX_BATCH_SIZE=3000 2022-07-14 19:13:48,882 [root] - WriteTask-0 started with pid 718347 2022-07-14 19:13:48,883 [root] - WriteTask-1 started with pid 718348 @@ -427,3 +428,5 @@ SQLWriter 类封装了拼 SQL 和写数据的逻辑。所有的表都没有提 + +