我在我的SQL Server实例创建JSON数据,并试图将其插入在golang使用大容量插入操作couchbase桶(约5000条记录)。这里的问题是整个数据没有被推送,并且只有插入了随机数量的记录(在2000到3000之间)。gocb:批量插入到couchbase使用golang-整个数据没有被插入
的代码是:
package main
import (
"database/sql"
"log"
"fmt"
_ "github.com/denisenkom/go-mssqldb"
"gopkg.in/couchbase/gocb.v1"
)
func main() {
var (
ID string
JSONData string
)
var items []gocb.BulkOp
cluster, _ := gocb.Connect("couchbase://localhost")
bucket, _ := cluster.OpenBucket("example", "")
condb, _ := sql.Open("mssql", "server=.\\SQLEXPRESS;port=62587; user id=<id>;password=<pwd>;")
// Get approx 5000 Records From SQL Server in JSON format
rows, err = condb.Query("Select id, JSONData From User")
if err != nil {
log.Fatal(err)
err = nil
}
for rows.Next() {
_ = rows.Scan(&ID,&JSONData)
items = append(items, &gocb.UpsertOp{Key: ID, Value: JSONData})
}
//Bulk Load JSON into Couchbase
err = bucket.Do(items)
if err != nil {
fmt.Println("ERRROR PERFORMING BULK INSERT:", err)
}
_ = bucket.Close()
}
请告诉我,我哪里错在这里。
FYI列ID和JSONdata在SQL查询中包含有效的键和JSON字符串。此外,任何改善建议,在编码的方式将不胜感激。
你如何验证2-3000?从Couchbase网络用户界面?一个建议(主要是作为安全)将使用insert()而不是upsert,以防万一id不唯一。 –
@MattIngenthron我实际上是调用一个存储过程,用每个记录的唯一文档ID填充用户表中的数据,我也尝试过使用Insert操作。即使我冲洗桶并插入一批新的数据,我也会得到相同的结果。是的,我正在观察从Couchbase网络用户界面插入的数量 –