私はSQL ServerインスタンスにJSONデータ(約5000レコード)を作成していて、golangの一括挿入操作を使用してcouchbaseバケットに挿入しようとしています。ここで問題となるのは、データ全体がプッシュされておらず、ランダムなレコード数(2000〜3000)が挿入されているということです。gocb:golangを使用してcouchbaseに一括挿入 - 全体のデータが挿入されていません
コードは次のとおりです。私はここで間違っていたところ
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 sqlクエリの列IDとJSONdataには、有効なキーとJSON文字列が含まれています。また、コード化された方法での改善アドバイスが評価されます。
2-3000をどのように確認していますか? Couchbase Web UIから? 1つの推奨事項(主に安全)は、idが一意でない場合に備えて、upsertではなくinsert()を使用することです。 –
@MattIngenthron私は実際に各レコードの一意のドキュメントIDでユーザーテーブルのデータを設定するストアドプロシージャを呼び出して、私はあまりにも挿入操作を使用してみました。バケツを流して新しいバッチデータを挿入しても、同じ結果が得られます。そして、私はCouchbaseウェブUIからの挿入物の数を観察しています –