咖啡伴侶

          呆在上海
          posts - 163, comments - 156, trackbacks - 0, articles - 2

          bson和json

          Posted on 2013-09-23 14:08 oathleo 閱讀(3293) 評論(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()))

          }
          主站蜘蛛池模板: 宕昌县| 安达市| 左权县| 叶城县| 五莲县| 灵台县| 赤城县| 兴隆县| 都安| 元江| 建宁县| 红原县| 宜阳县| 铅山县| 汝南县| 全椒县| 沾化县| 家居| 山东| 无为县| 佛学| 玉环县| 渭南市| 阜南县| 兰坪| 永寿县| 扎兰屯市| 镇巴县| 沂水县| 疏勒县| 新晃| 松原市| 咸阳市| 武义县| 噶尔县| 昌吉市| 杭锦旗| 敦化市| 柘城县| 合作市| 论坛|