博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bson和json性能对比
阅读量:5870 次
发布时间:2019-06-19

本文共 2660 字,大约阅读时间需要 8 分钟。

hot3.png

测试1000个数据 每个数据10个字节,分别使用字节、json、bson方式 存储,并用gzip压缩 

Bson

package mainimport (    "bytes"    "compress/gzip"    "fmt"    "labix.org/v2/mgo/bson"    "math/rand")type HisCollection struct {    RTValues []RTValue}type RTValue struct {    Time   int32    Status int16    Value  float32}func main() {    fmt.Println("start")    size := 1000    col := make([]RTValue, size)    for i := 0; i < size; i++ {        col[i] = RTValue{Time: int32(i), Status: 100, Value: rand.Float32()}    }    his := HisCollection{RTValues: col}    data, err := bson.Marshal(&his)    if err != nil {        panic(err)    }    //    fmt.Println(data)    fmt.Println("bson byte:", len(data))    var compress_data_buf bytes.Buffer    writer := gzip.NewWriter(&compress_data_buf)    defer writer.Close()    writer.Write(data)    writer.Flush()    fmt.Println("bson gzip compress:",len(compress_data_buf.Bytes()))}

Raw

package mainimport (    "bytes"    "compress/gzip"    "fmt"    "math/rand"    "openplant/opnet")func main() {    var compress_data_buf bytes.Buffer    writer := gzip.NewWriter(&compress_data_buf)    defer writer.Close()    size := 1000    for i := 0; i < size; i++ {        writer.Write(opnet.WarpInt32ToByte(int32(i)))        writer.Write(opnet.WarpInt16ToByte(int16(100)))        writer.Write(opnet.WarpFloat32ToByte(rand.Float32()))    }    writer.Flush()    fmt.Println("raw data:", 10000)    fmt.Println("raw data gzip compress:", len(compress_data_buf.Bytes()))}

Json

package mainimport (    "bytes"    "compress/gzip"    "encoding/json"    "fmt"    "math/rand")type HisCollection struct {    RTValues []RTValue}type RTValue struct {    Time   int32    Status int16    Value  float32}func main() {    fmt.Println("start")    size := 1000    col := make([]RTValue, size)    for i := 0; i < size; i++ {        col[i] = RTValue{Time: int32(i), Status: 100, Value: rand.Float32()}    }    his := HisCollection{RTValues: col}    data, err := json.Marshal(&his)    fmt.Println("json string:", string(data))    fmt.Println("json string:", len(string(data)))    if err != nil {        panic(err)    }    //    fmt.Println(data)    fmt.Println("json byte:", len(data))    var compress_data_buf bytes.Buffer    writer := gzip.NewWriter(&compress_data_buf)    defer writer.Close()    writer.Write(data)    writer.Flush()    fmt.Println("json gzip compress:", len(compress_data_buf.Bytes()))}
输出结果:raw data: 10000raw data gzip compress: 6553json string: 44524json byte: 44524json gzip compress: 8125bson byte: 46910bson gzip compress: 9721

结果bson比json还大一点

个人结论是BSON对比json更加适合存储,在传输上没有太大优势

  BSON相对JSon

1.更快的遍历速度

2.操作更简易

3.增加了额外的数据类型

转载于:https://my.oschina.net/u/1431106/blog/188627

你可能感兴趣的文章
csv文件定义:RFC 4180
查看>>
hadoop之 hadoop 机架感知
查看>>
网盘搜索
查看>>
OS X Terminal shortcuts
查看>>
发布一个 Linux 下的 C++ 多线程库
查看>>
如何在阿里技术面试中脱颖而出?(内部资料)
查看>>
jquery 随楼层滚动导航激活状态改变特效
查看>>
sun8134的Blog
查看>>
SinoBBD亮相全球云计算大会 彰显一体化云力量
查看>>
实现gridview空白处的点击事件
查看>>
如何使电脑不会重复启动同一个进程
查看>>
Android测试之Monkey
查看>>
嵌入式流程解决方案
查看>>
Prototype1.5.1源代码解读分析-5
查看>>
菜鸟学Linux 第031篇笔记 script,控制,while,function
查看>>
XenApp_XenDesktop_7.6实战篇之十三:安装Virtual Delivery Agent For Windows Desktop OS
查看>>
Linux运维人员共用root帐户权限审计
查看>>
IT人怎能忘记这些开源?
查看>>
超详细Centos6.5文本模式安装步骤
查看>>
安装配置rabbitmq
查看>>