未验证 提交 acb10228 编写于 作者: sangshuduo's avatar sangshuduo 提交者: GitHub

docs: go connector refine (#11983)

* docs: refine connector doc

[TD-14839]

* docs: use TDengine CLI

[TD-14839]

* docs: replace JNI with navtive connection

[TD-14839]

* docs: make connectors doc use same preparition

[TD-14839]

* docs: refine connectors doc

[TD-14839]

* docs: refine connectors doc

[TD-14839]

* docs: refine connector docs

* docs: refine connector doc

[TD-14839]

* docs: refine connector doc

[TD-14839]

* docs: refine connector

[TD-14839]

* docs: fix faq path

* docs: refine cpp connector doc

* docs: refine cpp docs

* docs: fix java preparition

* docs: refine connector docs

* docs: refine connector docs

[TD-14839]

* docs: refine connector doc

[TD-14839]

* docs: refine connector docs

[TD-14839]

* docs: fix node.mdx

[TD-14839]

* docs: refine connector

[TD-14839]

* docs: refine cpp connector

[TD-14839]

* docs: correct bind parameter interface name

[TD-14839]

* docs: refine connector docs

[TD-14839]

* docs: refine connector

[TD-14839]

* docs: refine connector

[TD-14839]

* docs: refine connector docs

[TD-14839]

* docs: refine connector

[TD-14839]

* docs: fix connector tabs

[TD-14839]

* fix tabitem values

* docs: refine connector

[TD-14839]

* fix typo

* docs: fix connector

[TD-14839]

* fix csharp.mdx

* refine connector docs

question list is numerical

* refine go connector doc
上级 8b0cde6e
...@@ -40,7 +40,7 @@ TDengine 版本更新往往会增加新的功能特性,列表中的连接器 ...@@ -40,7 +40,7 @@ TDengine 版本更新往往会增加新的功能特性,列表中的连接器
## 功能特性 ## 功能特性
连接器对 TDengine 功能特性的支持对照如下[^1] 连接器对 TDengine 功能特性的支持对照如下:
### 使用原生接口(taosc) ### 使用原生接口(taosc)
...@@ -53,6 +53,10 @@ TDengine 版本更新往往会增加新的功能特性,列表中的连接器 ...@@ -53,6 +53,10 @@ TDengine 版本更新往往会增加新的功能特性,列表中的连接器
| **订阅功能** | 支持 | 支持 | 支持 | 支持 | 支持 | 暂不支持 | | **订阅功能** | 支持 | 支持 | 支持 | 支持 | 支持 | 暂不支持 |
| **Schemaless** | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | | **Schemaless** | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
:::info
由于不同编程语言数据库框架规范不同,并不意味着所有 C/C++ 接口都需要对应封装支持。
:::
### 使用 REST 接口 ### 使用 REST 接口
| **功能特性** | **Java** | **Python(暂不支持)** | **Go** | **C#(暂不支持)** | **Node.js** | **Rust** | | **功能特性** | **Java** | **Python(暂不支持)** | **Go** | **C#(暂不支持)** | **Node.js** | **Rust** |
...@@ -109,4 +113,3 @@ import VerifyLinux from "./_verify_linux.mdx"; ...@@ -109,4 +113,3 @@ import VerifyLinux from "./_verify_linux.mdx";
</TabItem> </TabItem>
</Tabs> </Tabs>
[^1]: 由于不同语言数据库框架规范不同,并不意味着所有 C/C++ 接口都需要对应封装支持。
...@@ -176,13 +176,13 @@ namespace TDengineExample ...@@ -176,13 +176,13 @@ namespace TDengineExample
## 常见问题 ## 常见问题
* "Unable to establish connection","Unable to resolve FQDN" 1. "Unable to establish connection","Unable to resolve FQDN"
一般是因为 FQDN 配置不正确。可以参考[如何彻底搞懂 TDengine 的 FQDN](https://www.taosdata.com/blog/2021/07/29/2741.html)解决。 一般是因为 FQDN 配置不正确。可以参考[如何彻底搞懂 TDengine 的 FQDN](https://www.taosdata.com/blog/2021/07/29/2741.html)解决。
* Unhandled exception. System.DllNotFoundException: Unable to load DLL 'taos' or one of its dependencies: 找不到指定的模块。 2. Unhandled exception. System.DllNotFoundException: Unable to load DLL 'taos' or one of its dependencies: 找不到指定的模块。
一般是因为程序没有找到依赖的客户端驱动。解决方法为:Windows 下可以将 `C:\TDengine\driver\taos.dll` 拷贝到 `C:\Windows\System32\ ` 目录下,Linux 下建立如下软链接 `ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so` 即可。 一般是因为程序没有找到依赖的客户端驱动。解决方法为:Windows 下可以将 `C:\TDengine\driver\taos.dll` 拷贝到 `C:\Windows\System32\ ` 目录下,Linux 下建立如下软链接 `ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so` 即可。
## API 参考 ## API 参考
......
...@@ -69,26 +69,33 @@ REST 连接器支持所有能运行 Go 的平台。 ...@@ -69,26 +69,33 @@ REST 连接器支持所有能运行 Go 的平台。
### 使用 go mod 管理 ### 使用 go mod 管理
`go mod` 初始化项目: 1. 使用 `go mod` 命令初始化项目:
```text ```text
go mod init taos-demo go mod init taos-demo
``` ```
引入taosSql 2. 引入 taosSql
```go ```go
import ( import (
"database/sql" "database/sql"
_ "github.com/taosdata/driver-go/v2/taosSql" _ "github.com/taosdata/driver-go/v2/taosSql"
) )
``` ```
使用`go mod`方式管理依赖包: 3. 使用 `go mod tidy` 更新依赖包:
```text ```text
go mod tidy go mod tidy
``` ```
4. 使用 `go run taos-demo` 运行程序或使用 `go build` 命令编译出二进制文件。
```text
go run taos-demo
go build
```
## 建立连接 ## 建立连接
...@@ -259,37 +266,37 @@ func main() { ...@@ -259,37 +266,37 @@ func main() {
## 常见问题 ## 常见问题
* 无法找到包 `github.com/taosdata/driver-go/v2/taosRestful` 1. 无法找到包 `github.com/taosdata/driver-go/v2/taosRestful`
`go.mod` require 块对`github.com/taosdata/driver-go/v2`的引用改为`github.com/taosdata/driver-go/v2 develop`,之后执行 `go mod tidy` `go.mod` require 块对`github.com/taosdata/driver-go/v2`的引用改为`github.com/taosdata/driver-go/v2 develop`,之后执行 `go mod tidy`
* database/sql stmt 相关接口崩溃 2. database/sql stmt(参数绑定)相关接口崩溃
REST 不支持 stmt 相关接口,建议使用`db.Exec``db.Query` REST 不支持参数绑定相关接口,建议使用`db.Exec``db.Query`
* 使用 `use db` 语句后执行其他语句报错 `[0x217] Database not specified or available` 3. 使用 `use db` 语句后执行其他语句报错 `[0x217] Database not specified or available`
REST 接口中 SQL 语句的执行无上下文关联,使用 `use db` 语句不会生效,解决办法见上方使用限制章节。 REST 接口中 SQL 语句的执行无上下文关联,使用 `use db` 语句不会生效,解决办法见上方使用限制章节。
* 使用 taosSql 不报错使用 taosRestful 报错 `[0x217] Database not specified or available` 4. 使用 taosSql 不报错使用 taosRestful 报错 `[0x217] Database not specified or available`
因为 REST 接口无状态,使用 `use db` 语句不会生效,解决办法见上方使用限制章节。 因为 REST 接口无状态,使用 `use db` 语句不会生效,解决办法见上方使用限制章节。
* 升级 `github.com/taosdata/driver-go/v2/taosRestful` 5. 升级 `github.com/taosdata/driver-go/v2/taosRestful`
`go.mod` 文件中对 `github.com/taosdata/driver-go/v2` 的引用改为 `github.com/taosdata/driver-go/v2 develop`,之后执行 `go mod tidy` `go.mod` 文件中对 `github.com/taosdata/driver-go/v2` 的引用改为 `github.com/taosdata/driver-go/v2 develop`,之后执行 `go mod tidy`
* `readBufferSize` 参数调大后无明显效果 6. `readBufferSize` 参数调大后无明显效果
`readBufferSize` 调大后会减少获取结果时 `syscall` 的调用。如果查询结果的数据量不大,修改该参数不会带来明显提升,如果该参数修改过大,瓶颈会在解析 JSON 数据。如果需要优化查询速度,需要根据实际情况调整该值来达到查询效果最优。 `readBufferSize` 调大后会减少获取结果时 `syscall` 的调用。如果查询结果的数据量不大,修改该参数不会带来明显提升,如果该参数修改过大,瓶颈会在解析 JSON 数据。如果需要优化查询速度,需要根据实际情况调整该值来达到查询效果最优。
* `disableCompression` 参数设置为 `false` 时查询效率降低 7. `disableCompression` 参数设置为 `false` 时查询效率降低
`disableCompression` 参数设置为 `false` 时查询结果会使用 `gzip` 压缩后传输,拿到数据后要先进行 `gzip` 解压。 `disableCompression` 参数设置为 `false` 时查询结果会使用 `gzip` 压缩后传输,拿到数据后要先进行 `gzip` 解压。
* `go get` 命令无法获取包,或者获取包超时 8. `go get` 命令无法获取包,或者获取包超时
设置 Go 代理 `go env -w GOPROXY=https://goproxy.cn,direct` 设置 Go 代理 `go env -w GOPROXY=https://goproxy.cn,direct`
## 常用 API ## 常用 API
...@@ -297,103 +304,105 @@ REST 不支持 stmt 相关接口,建议使用`db.Exec`和`db.Query`。 ...@@ -297,103 +304,105 @@ REST 不支持 stmt 相关接口,建议使用`db.Exec`和`db.Query`。
* `sql.Open(DRIVER_NAME string, dataSourceName string) *DB` * `sql.Open(DRIVER_NAME string, dataSourceName string) *DB`
API 用来打开 DB,返回一个类型为 \*DB 的对象。 API 用来打开 DB,返回一个类型为 \*DB 的对象。
**注意** API 成功创建的时候,并没有做权限等检查,只有在真正执行 Query 或者 Exec 的时候才能真正的去创建连接,并同时检查 user/password/host/port 是不是合法。 :::info
API 成功创建的时候,并没有做权限等检查,只有在真正执行 Query 或者 Exec 的时候才能真正的去创建连接,并同时检查 user/password/host/port 是不是合法。
:::
* `func (db *DB) Exec(query string, args ...interface{}) (Result, error)` * `func (db *DB) Exec(query string, args ...interface{}) (Result, error)`
`sql.Open` 内置的方法,用来执行非查询相关 SQL `sql.Open` 内置的方法,用来执行非查询相关 SQL
* `func (db *DB) Query(query string, args ...interface{}) (*Rows, error)` * `func (db *DB) Query(query string, args ...interface{}) (*Rows, error)`
`sql.Open` 内置的方法,用来执行查询语句。 `sql.Open` 内置的方法,用来执行查询语句。
### 高级功能 API ### 高级功能afAPI
af 包封装了订阅、stmt TDengine 高级功能。 `af` 包封装了订阅、schemaless、参数绑定 TDengine 高级功能。
* `af.Open(host, user, pass, db string, port int) (*Connector, error)` * `af.Open(host, user, pass, db string, port int) (*Connector, error)`
API 通过 cgo 创建与 taosd 的连接。 API 通过 cgo 创建与 taosd 的连接。
* `func (conn *Connector) Close() error` * `func (conn *Connector) Close() error`
关闭与 taosd 的连接。 关闭与 taosd 的连接。
* `func (conn *Connector) StmtExecute(sql string, params *param.Param) (res driver.Result, err error)`
stmt 单行插入。
* `func (conn *Connector) StmtQuery(sql string, params *param.Param) (rows driver.Rows, err error)`
stmt 查询,返回 `database/sql/driver` 包的 `Rows` 结构。
订阅 订阅
* `func (conn *Connector) Subscribe(restart bool, topic string, sql string, interval time.Duration) (Subscriber, error)` * `func (conn *Connector) Subscribe(restart bool, topic string, sql string, interval time.Duration) (Subscriber, error)`
订阅数据。 订阅数据。
* `func (s *taosSubscriber) Consume() (driver.Rows, error)` * `func (s *taosSubscriber) Consume() (driver.Rows, error)`
消费订阅数据,返回 `database/sql/driver` 包的 `Rows` 结构。 消费订阅数据,返回 `database/sql/driver` 包的 `Rows` 结构。
* `func (s *taosSubscriber) Unsubscribe(keepProgress bool)` * `func (s *taosSubscriber) Unsubscribe(keepProgress bool)`
取消订阅数据。 取消订阅数据。
schemaless 写入 schemaless 写入
* `func (conn *Connector) InfluxDBInsertLines(lines []string, precision string) error` * `func (conn *Connector) InfluxDBInsertLines(lines []string, precision string) error`
写入 influxDB 行协议。 写入 influxDB 行协议。
* `func (conn *Connector) OpenTSDBInsertTelnetLines(lines []string) error` * `func (conn *Connector) OpenTSDBInsertTelnetLines(lines []string) error`
写入 OpenTDSB telnet 协议 写入 OpenTDSB telnet 协议数据
* `func (conn *Connector) OpenTSDBInsertJsonPayload(payload string) error` * `func (conn *Connector) OpenTSDBInsertJsonPayload(payload string) error`
写入 OpenTSDB json 协议。 写入 OpenTSDB JSON 协议数据。
参数绑定
* `func (conn *Connector) StmtExecute(sql string, params *param.Param) (res driver.Result, err error)`
参数绑定单行插入。
* `func (conn *Connector) StmtQuery(sql string, params *param.Param) (rows driver.Rows, err error)`
批量 stmt 插入 参数绑定查询,返回 `database/sql/driver` 包的 `Rows` 结构。
* `func (conn *Connector) InsertStmt() *insertstmt.InsertStmt` * `func (conn *Connector) InsertStmt() *insertstmt.InsertStmt`
初始化 stmt 初始化参数
* `func (stmt *InsertStmt) Prepare(sql string) error` * `func (stmt *InsertStmt) Prepare(sql string) error`
预处理 SQL 语句。 参数绑定预处理 SQL 语句。
* `func (stmt *InsertStmt) SetTableName(name string) error` * `func (stmt *InsertStmt) SetTableName(name string) error`
设置表名。 参数绑定设置表名。
* `func (stmt *InsertStmt) SetSubTableName(name string) error` * `func (stmt *InsertStmt) SetSubTableName(name string) error`
设置子表名。 参数绑定设置子表名。
* `func (stmt *InsertStmt) BindParam(params []*param.Param, bindType *param.ColumnType) error` * `func (stmt *InsertStmt) BindParam(params []*param.Param, bindType *param.ColumnType) error`
绑定多行数据。 参数绑定多行数据。
* `func (stmt *InsertStmt) AddBatch() error` * `func (stmt *InsertStmt) AddBatch() error`
添加到批处理。 添加到参数绑定批处理。
* `func (stmt *InsertStmt) Execute() error` * `func (stmt *InsertStmt) Execute() error`
执行 stmt 执行参数绑定
* `func (stmt *InsertStmt) GetAffectedRows() int` * `func (stmt *InsertStmt) GetAffectedRows() int`
获取受影响行数。 获取参数绑定插入受影响行数。
* `func (stmt *InsertStmt) Close() error` * `func (stmt *InsertStmt) Close() error`
结束 stmt 结束参数绑定
## API 参考 ## API 参考
......
...@@ -814,25 +814,25 @@ Query OK, 1 row(s) in set (0.000141s) ...@@ -814,25 +814,25 @@ Query OK, 1 row(s) in set (0.000141s)
## 常见问题 ## 常见问题
- 使用 Statement 的 `addBatch` 和 `executeBatch` 来执行“批量写入/更行”,为什么没有带来性能上的提升? 1. 使用 Statement 的 `addBatch` 和 `executeBatch` 来执行“批量写入/更行”,为什么没有带来性能上的提升?
**原因**:TDengine 的 JDBC 实现中,通过 `addBatch` 方法提交的 SQL 语句,会按照添加的顺序,依次执行,这种方式没有减少与服务端的交互次数,不会带来性能上的提升。 **原因**:TDengine 的 JDBC 实现中,通过 `addBatch` 方法提交的 SQL 语句,会按照添加的顺序,依次执行,这种方式没有减少与服务端的交互次数,不会带来性能上的提升。
**解决方法**:1. 在一条 insert 语句中拼接多个 values 值;2. 使用多线程的方式并发插入;3. 使用参数绑定的写入方式 **解决方法**:1. 在一条 insert 语句中拼接多个 values 值;2. 使用多线程的方式并发插入;3. 使用参数绑定的写入方式
- java.lang.UnsatisfiedLinkError: no taos in java.library.path 2. java.lang.UnsatisfiedLinkError: no taos in java.library.path
**原因**:程序没有找到依赖的本地函数库 taos。 **原因**:程序没有找到依赖的本地函数库 taos。
**解决方法**:Windows 下可以将 C:\TDengine\driver\taos.dll 拷贝到 C:\Windows\System32\ 目录下,Linux 下将建立如下软链 `ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so` 即可。 **解决方法**:Windows 下可以将 C:\TDengine\driver\taos.dll 拷贝到 C:\Windows\System32\ 目录下,Linux 下将建立如下软链 `ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so` 即可。
- java.lang.UnsatisfiedLinkError: taos.dll Can't load AMD 64 bit on a IA 32-bit platform 3. java.lang.UnsatisfiedLinkError: taos.dll Can't load AMD 64 bit on a IA 32-bit platform
**原因**:目前 TDengine 只支持 64 位 JDK。 **原因**:目前 TDengine 只支持 64 位 JDK。
**解决方法**:重新安装 64 位 JDK。 **解决方法**:重新安装 64 位 JDK。
- 其它问题请参考 [FAQ](/train-faq/faq) 4. 其它问题请参考 [FAQ](/train-faq/faq)
## API 参考 ## API 参考
......
...@@ -230,9 +230,13 @@ Node.js 连接器的使用参见[视频教程](https://www.taosdata.com/blog/202 ...@@ -230,9 +230,13 @@ Node.js 连接器的使用参见[视频教程](https://www.taosdata.com/blog/202
sudo systemctl start taosadapter sudo systemctl start taosadapter
``` ```
2. 连接器 >v2.0.6 目前兼容的 Node.js 为:>=v10.20.0 <= v10.9.0 || >=v12.8.0 <= v12.9.1 2. Node.js 版本
3. "Unable to establish connection","Unable to resolve FQDN" 等问题一般都是因为配置 FQDN 不正确。 可以参考[如何彻底搞懂 TDengine 的 FQDN](https://www.taosdata.com/blog/2021/07/29/2741.html) 。 连接器 >v2.0.6 目前兼容的 Node.js 版本为:>=v10.20.0 <= v10.9.0 || >=v12.8.0 <= v12.9.1
3. "Unable to establish connection","Unable to resolve FQDN"
一般都是因为配置 FQDN 不正确。 可以参考[如何彻底搞懂 TDengine 的 FQDN](https://www.taosdata.com/blog/2021/07/29/2741.html) 。
## 重要更新记录 ## 重要更新记录
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册