Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
5e2d9325
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
未验证
提交
5e2d9325
编写于
12月 02, 2019
作者:
S
slguan
提交者:
GitHub
12月 02, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #815 from taosdata/hotfix/#813
Hotfix/#813
上级
a7f79b50
167d6cb7
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
59 addition
and
5 deletion
+59
-5
documentation/webdocs/markdowndocs/connector-ch.md
documentation/webdocs/markdowndocs/connector-ch.md
+52
-3
src/system/detail/src/vnodeImport.c
src/system/detail/src/vnodeImport.c
+7
-2
未找到文件。
documentation/webdocs/markdowndocs/connector-ch.md
浏览文件 @
5e2d9325
...
...
@@ -392,15 +392,64 @@ curl -u username:password -d '<SQL>' <ip>:<PORT>/rest/sql
## Go Connector
TDengine提供了GO驱动程序“taosSql”包。taosSql驱动包是基于GO的“database/sql/driver”接口的实现。用户可在安装后的/usr/local/taos/connector/go目录获得GO的客户端驱动程序。用户需将驱动包/usr/local/taos/connector/go/src/taosSql目录拷贝到应用程序工程的src目录下。然后在应用程序中导入驱动包,就可以使用“database/sql”中定义的接口访问TDengine:
#### 安装TDengine
Go的链接器使用了到了 libtaos.so 和taos.h,因此,在使用Go连接器之前,需要在程序运行的机器上安装TDengine以获得相关的驱动文件。
#### Go语言引入package
TDengine提供了GO驱动程序“taosSql”包。taosSql驱动包是基于GO的“database/sql/driver”接口的实现。用户可以通过
`go get`
命令来获取驱动包。
```
sh
go get github.com/taosdata/TDengine/src/connector/go/src/taosSql
```
然后在应用程序中导入驱动包,就可以使用“database/sql”中定义的接口访问TDengine:
```
Go
import (
"database/sql"
_ "taosSql"
_ "
github.com/taosdata/TDengine/src/connector/go/src/
taosSql"
)
```
taosSql驱动包内采用cgo模式,调用了TDengine的C/C++同步接口,与TDengine进行交互,因此,在数据库操作执行完成之前,客户端应用将处于阻塞状态。单个数据库连接,在同一时刻只能有一个线程调用API。客户应用可以建立多个连接,进行多线程的数据写入或查询处理。
更多使用的细节,请参考下载目录中的示例源码。
#### Go语言使用参考
在Go程序中使用TDengine写入方法大致可以分为以下几步
1.
打开TDengine数据库链接
首先需要调用sql包中的Open方法,打开数据库,并获得db对象
```
go
db
,
err
:=
sql
.
Open
(
taosDriverName
,
dbuser
+
":"
+
dbpassword
+
"@/tcp("
+
daemonUrl
+
")/"
+
dbname
)
if
err
!=
nil
{
log
.
Fatalf
(
"Open database error: %s
\n
"
,
err
)
}
defer
db
.
Close
()
```
其中参数为
-
taosDataname: 涛思数据库的名称,其值为字符串"taosSql"
-
dbuser和dbpassword: 链接TDengine的用户名和密码,缺省为root和taosdata,类型为字符串
-
daemonUrl: 为TDengine的地址,其形式为
`ip address:port`
形式,port填写缺省值0即可。例如:"116.118.24.71:0"
-
dbname:TDengine中的database名称,通过
`create database`
创建的数据库。如果为空则在后续的写入和查询操作必须通过”数据库名.超级表名或表名“的方式指定数据库名
2.
创建数据库
打开TDengine数据库连接后,首选需要创建数据库。基本用法和直接在TDengine客户端shell下一样,通过create database + 数据库名的方法来创建。
```
go
db
,
err
:=
sql
.
Open
(
taosDriverName
,
dbuser
+
":"
+
dbpassword
+
"@/tcp("
+
daemonUrl
+
")/"
)
if
err
!=
nil
{
log
.
Fatalf
(
"Open database error: %s
\n
"
,
err
)
}
defer
db
.
Close
()
//准备创建数据库语句
sqlcmd
:=
fmt
.
Sprintf
(
"create database if not exists %s"
,
dbname
)
//执行语句并检查错误
_
,
err
=
db
.
Exec
(
sqlcmd
)
if
err
!=
nil
{
log
.
Fatalf
(
"Create database error: %s
\n
"
,
err
)
}
```
3.
创建表、写入和查询数据
在创建好了数据库后,就可以开始创建表和写入查询数据了。这些操作的基本思路都是首先组装SQL语句,然后调用db.Exec执行,并检查错误信息和执行相应的处理。可以参考上面的样例代码
src/system/detail/src/vnodeImport.c
浏览文件 @
5e2d9325
...
...
@@ -466,8 +466,6 @@ static int vnodeLoadNeededBlockData(SMeterObj *pObj, SImportHandle *pHandle, int
SCompBlock
*
pBlock
=
pHandle
->
pBlocks
+
blockId
;
*
code
=
TSDB_CODE_SUCCESS
;
assert
(
pBlock
->
sversion
==
pObj
->
sversion
);
SVnodeObj
*
pVnode
=
vnodeList
+
pObj
->
vnode
;
int
dfd
=
pBlock
->
last
?
pVnode
->
lfd
:
pVnode
->
dfd
;
...
...
@@ -989,6 +987,13 @@ static int vnodeMergeDataIntoFile(SImportInfo *pImport, const char *payload, int
}
}
int
aslot
=
MIN
(
blockIter
.
slot
,
importHandle
.
compInfo
.
numOfBlocks
-
1
);
int64_t
sversion
=
importHandle
.
pBlocks
[
aslot
].
sversion
;
if
(
sversion
!=
pObj
->
sversion
)
{
code
=
TSDB_CODE_OTHERS
;
goto
_error_merge
;
}
// Open the new .t file if not opened yet.
if
(
pVnode
->
nfd
<=
0
)
{
if
(
vnodeOpenTempFilesForImport
(
&
importHandle
,
pObj
,
fid
)
<
0
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录