From aa85effe321e2172b5e317a7e2a951d1ba27595d Mon Sep 17 00:00:00 2001 From: dingbo Date: Fri, 15 Jul 2022 08:11:47 +0800 Subject: [PATCH] docs: enhance handle exception --- .../taos/example/highvolume/SQLWriter.java | 6 ++--- ..._faster_queue.py => fast_write_example.py} | 0 docs/examples/python/sql_writer.py | 10 +++++++- docs/examples/python/stmt_writer.py | 2 ++ .../03-insert-data/05-high-volume.md | 25 +++++++++++-------- 5 files changed, 28 insertions(+), 15 deletions(-) rename docs/examples/python/{highvolume_faster_queue.py => fast_write_example.py} (100%) create mode 100644 docs/examples/python/stmt_writer.py 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 68b759f2e4..c2989acdbe 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 886f257001..cb04f85c23 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 0000000000..60846b5a64 --- /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 52b89e8a9b..dec96bf36a 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 和写数据的逻辑。所有的表都没有提 + + -- GitLab