golang 下 mongodb 与 postgresql 插入速度的测试

wangyanlb · · 3849 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

近期看了篇文章,说是postgresql也支持nosql,定义了专属的jsonb数据类型,而且速度比mongodb还快,今天验证了下,同样的数据,postgre的插入速度只是mongo 的三分一不到。有可能是各自的驱动造成的。

 

数据结构:
type StockDay struct {
    Date             int32
    O, H, L, C, V, A float32
}

mongo 用了mgo 包,插入代码如下:

func ReadHq(conn net.Conn, c *mgo.Collection, Code string) {

    var buf [28]byte
    var x Stock
    var y Kline_Day
    for i := 0; ; i++ {
        _, err := conn.Read(buf[0:28])
        if err == io.EOF {
            fmt.Println("此个文件传输结束")
            break
        }
        if err != nil {
            fmt.Println(err)
            return
        }

        b_buf := bytes.NewBuffer(buf[0:28])

        binary.Read(b_buf, binary.LittleEndian, &x) //binary.LittleEndian  是内存中的字节序的概念,就是把低字节的放到了后面。网络传输一般用BigEndian,内存字节序和cpu有关,编程时要转化。
        y.Code = Code
        y.A = x.A
        y.C = x.C
        y.Date = x.Date
        y.H = x.H
        y.L = x.L
        y.O = x.O
        y.V = x.V
        //fmt.Println(y)
        err = c.Insert(&y)
        if err != nil {
            panic(err)
        }

    }

    return
}

#postgresql 的表结构

CREATE TABLE json_test
(
  id serial NOT NULL,
  data jsonb,
  CONSTRAINT json_test_pkey PRIMARY KEY (id)
)

用了 "github.com/lib/pq" 这个包:
插入代码:

func ReadHq(conn net.Conn, db *sql.DB, Code string) {

    var buf [28]byte
    var x StockDay
    for {
        _, err := conn.Read(buf[0:28])
        if err == io.EOF {
            fmt.Println("此个文件传输结束")
            break
        }
        if err != nil {
            fmt.Println(err)
            return
        }

        b_buf := bytes.NewBuffer(buf[0:28])
        binary.Read(b_buf, binary.LittleEndian, &x) //binary.LittleEndian  是内存中的字节序的概念,就是把低字节的放到了后面。网络传输一般用BigEndian,内存字节序和cpu有关,编程时要转化。

        //fmt.Println(y)
        //err = c.Insert(&y)
        buf, err := json.Marshal(&x)
        //插入数据
        stmt, err := db.Prepare("INSERT INTO json_test(data) VALUES($1) RETURNING id")
        checkErr(err)
        _, err = stmt.Exec(string(buf))
        checkErr(err)
    }
    return
}

 


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:wangyanlb

查看原文:golang 下 mongodb 与 postgresql 插入速度的测试

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3849 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传