码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2015-07-22 06:50:53      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

近期看了篇文章,说是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
}

 

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

标签:

原文地址:http://www.cnblogs.com/wangyanlb/p/4666179.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!