咖啡伴侶

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

          bson和json

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

          }
          主站蜘蛛池模板: 阳高县| 南京市| 江西省| 漳州市| 定兴县| 江油市| 西丰县| 伊宁县| 揭西县| 沧源| 惠州市| 甘德县| 沛县| 依安县| 宣汉县| 韩城市| 久治县| 嘉义市| 大厂| 天气| 灵武市| 贡觉县| 耒阳市| 沭阳县| 额尔古纳市| 无为县| 商都县| 普兰县| 阳东县| 克什克腾旗| 汤阴县| 永济市| 礼泉县| 九台市| 叙永县| 米泉市| 宿迁市| 淮滨县| 资源县| 美姑县| 延边|