测试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.增加了额外的数据类型