首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gocb:使用golang批量插入couchbase -未插入整个数据

gocb:使用golang批量插入couchbase -未插入整个数据
EN

Stack Overflow用户
提问于 2017-07-13 21:42:25
回答 2查看 655关注 0票数 1

我正在创建JSON数据(大约。5000条记录),并尝试使用golang中的批量插入操作将其插入到couchbase存储桶中。这里的问题是没有推送整个数据,并且只插入了随机数量的记录(在2000到3000之间)。

代码是:

代码语言:javascript
复制
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() 
}

请告诉我我哪里出错了。

仅供参考,sql query中的ID和JSONdata列包含有效的key和JSON字符串。此外,任何改进建议在其编码的方式将受到赞赏。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-18 19:57:33

我错过了检查InsertOp类型的Err字段,当我这样做时,我才知道当数据超出其容量时,项数组溢出,并且当您打印该字段时,屏幕上会显示一条消息'queue overflows

代码语言:javascript
复制
for i := range items {
    fmt.Println( items[i].(*gocb.InsertOp).Err)
}

错误消息的附加屏幕截图在此处:Err.png

除了将数据拆分成多个批处理和执行多个批量插入之外,是否有解决此限制的方法?

票数 1
EN

Stack Overflow用户

发布于 2017-07-14 05:36:15

为什么不尝试使用一些goroutine和一个通道来同步它们。创建需要插入的项的通道,然后启动16个或更多从通道读取的goroutines,执行插入,然后继续。对于严格的串行插入器来说,最常见的明显瓶颈是网络往返,如果您可以让多个goroutines同时执行插入,您将极大地提高性能。

附注:批量插入没有插入每个文档的问题是一个奇怪的问题,我将对此进行研究。正如@ingenthr上面提到的,你有没有可能正在做upsert,并且对相同的键有多个操作?

老问题,在error的Answers部分中:您是否从批量插入中获得任何错误输出?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45082446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档