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

近期看了篇文章,说是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
}
时间: 2024-10-22 08:55:30

golang 下 mongodb 与 postgresql 插入速度的测试的相关文章

golang自定义数据类型查询与插入postgresql中point数据

golang自定义数据类型查询与插入postgresql中point数据 具体代码如下: package main import ( "bytes" "database/sql" "database/sql/driver" "fmt" _ "github.com/lib/pq" "strconv" "strings" ) // 自定义支持类型 type Point s

关于Mysql表InnoDB下插入速度慢的解决方案

最近做了 server_log 日志数据库记录,仅仅插入,由平台来获取数据进行分析的需求. 但是内部反馈插入数据库记录非常耗时,我就很纳闷了,一个insert怎么会 30-50ms 呢?按说应该在 0.5ms 以内的: 经过分析,发现是InnoDB数据库的Row_Format格式问题,改为MyISAM表就可以了,但是InnoDB是支持事务的,一般是推荐InnoDB的,好奇为什么. 而且InnoDB的表,只能选择 COMPACT 和REDUNDANT 两种行格式(RoW_FORMAT). 经过搜索

golang解析mongodb中的ISODate类型

在golang中可以使用time.Time数据类型来保存mongodb中的ISODate时间. g type Model struct {     uploadDate time.Time `bson:"uploadDate"` } m := Model{} if err := c.Find(nil).Select({"_id": 0, "uploadDate": 1}).One(&m); err != nil {     fmt.Pri

Win7下MongoDB的安装和使用

Win7下MongoDB的安装和使用 1.下载: http://www.mongodb.org/downloads 2.安装: 安装目录为 D:\mongodb\MongoDB 2.6 Standard 配置环境变量Path为 D:\mongodb\MongoDB 2.6 Standard\bin D:\mongodb\ 下建立一个data文件夹用于存放数据库文件 3.启动服务器: cmd下输入 mongod.exe --dbpath d:\mongodb\data 如果启动正常会看到类似如下的

Linux下Mongodb数据库主从同步配置

说明: 有两台已经安装完成的Mongodb数据库服务器,现在需要把一台设置为主库,另一台设置为从库,实现主从同步. 操作系统:CentOS 7.0 64位 MongoDB数据库版本:mongodb-linux-x86_64-2.6.5 准备工作:MongoDB数据库安装 具体操作: 一.配置MongoDB主库 以下操作在MongoDB主库服务器上进行 1.cd  /usr/local/mongodb/ #进入MongoDB安装目录 vi /usr/local/mongodb/mongodb.co

windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)

windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) 简单说几句 在mongodb中3元素:db(数据库).collection(集合).document(文档) 其中collection类似于数据库中的表,document类似于行,这样一来我们就将内容对比起来记忆学习了. 数据格式 MongoDB documents是BSON格式(一种类json的一种二进制形式的存

Linux 下mongodb的安装

l第一:下载,解压mongodb文件.把解压的文件放在/opt/下面(存放目录安装自己习惯存放) # wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.4.tgz # tar -xvf mongodb-linux-x86_64-2.0.4.tgz # mv mongodb-linux-x86_64-2.0.4.tgz mongodb2.0.4  (为了方便,把它从命名的更加简洁些) 第二:创建mongodb存放的数据文件.

160304、mysql数据库插入速度和读取速度的调整记录

需求:由于项目变态,需要在一个比较短时间段急剧增加数据库记录(两三天内,由于0增加至5亿).在整个过程调优过程非常艰辛 思路: (1)提高数据库插入性能中心思想:尽量将数据一次性写入到Data File和减少数据库的checkpoint 操作.这次修改了下面四个配置项: 1)将 innodb_flush_log_at_trx_commit 配置设定为0:按过往经验设定为0,插入速度会有很大提高. 0: Write the log buffer to the log file and flush

innodb和myisam存储引擎插入速度

--innodb和myisam存储引擎插入速度 ------------------------------------2014/05/21 MySQL 5.6 全部默认设置,插入数据9999条,性能一般的虚拟机. mysql> delete from test; Query OK, 10000 rows affected (0.54 sec) mysql> alter table test engine=myisam; Query OK, 0 rows affected (0.15 sec)