Posted on 2013-09-23 14:08
oathleo 阅读(3283)
评论(0) 编辑 收藏 所属分类:
Golang
测试1000个数据 每个数据10个字节,分别使用字节、json、bson方式 存储,并用gzip压缩
结果bson比json还大一点,确实出乎意料
个人结论是BSON对比json更加适合存储,在传输上没有太大优势
BSON相对JSon
1.更快的遍历速度
2.操作更简易
3.增加了额外的数据类型
raw data: 10000
raw data gzip compress: 6553
json string: 44524
json byte: 44524
json gzip compress: 8125
bson byte: 46910
bson gzip compress: 9721
package main
import (
"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()))
}
package main
import (
"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()))
}
111
package main
import (
"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()))
}