码迷,mamicode.com
首页 > 编程语言 > 详细

json, protobuf-c++,pbc,sproto 性能测试与解决方案

时间:2015-06-24 20:50:00      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:

 

  本文目的是比较这四个方法的优缺点,并给出解决方案。

1. 测试环境说明

CPU: i3-2310M CPU @ 2.10GHz
OS: Linux(64位)
库的版本: lua5.1, luajit2.0,
注: 1. sproto库作者在代码中使用了lua5.2新库bitwise Operators,和我们使用的lua5.1环境不匹配,所以用能兼容lua5.2和lua5.1的库bit.numberlua代替 bitwise Operators。
      2. 也尝试过用protoc-gen-lua,但解出来的table需要手动解析,而且耗费时间较大。
 

2. 测试

2.0 测试函数接口说明

library function interface input/ output parameter note
sproto
1.en=cookie.encode(ab)
2.de=cookie.decode(en)
1. input: ab is table
2. input: en is binary string
1. the schema of the sproto  is very strong and flexible
2. 编写proto文件非常简单而且很人性化
3. 使用简单易用
sproto(nopack) similar with sproto similar with sproto  
pbc-lua

1.en=protobuf.encode
("Cookie.CookieValue", CookieValue)
2.de=protobuf.decode
("Cookie.CookieValue", en)
1. input: CookieValue is table,
2. input en is binary
这个decode出来的table是惰性展开的,访问该table时才能解开,不然会出现乱码
protobuf-c++

1. str=bilin.Serialize(tb,‘cookie‘)
2.bilin.Parse(str,‘cookie‘,#str)
1. input: tb is a table,
2.input: str is binary string
1. 一有改动,较难维护
2. 耗费时间多小与压缩比效果很好,比其他的方法
lua-cjson
1. en=cjson.encode(tb)
2.de=cjson.decode(en)
1. input: tb is a table,
2. input: en is cjson string
1. 空间占用很大
2. 耗费时间过大
3. 优点:(对我们现有的使用来看)无须转换程序,即解即用

2.1 测试结果

library encode times(1M次) decode times(1M次)  size(byets)
sproto 4.6501181125641s 11.385328769684s 139
sproto(nopack) 4.0319328308105s 9.9806959629059s 272
pbc-lua 9.3938179016113s 7.0795350074768s 117
protobuf-c++ 6.0948710441589s 9.6896359920502s 117
lua-cjson 23.541377067566s 15.335454940796s 437

测 试数据:{"pbid":[{"id":100188,"value":3},{"id":100189,"value":3}, {"id":100190,"value":3}],"daily":[{"daily_id":1125,"date_id":[{"id":100188,"value":1}]},{"daily_id":1126,"date_id":[{"id":100118,"value":1}]}],"total":[{"id":100188,"value":1}],"segments":[{"type":1,"ct":1415384160,"ttl":1415384160,"id":100001}],"imp":[{"win":2,"bid":3,"time":8160,"id":100188},{"win":2,"bid":3,"time":8155,"id":100182},{"win":2,"bid":3,"time":8157,"id":100181}]}

 

3. 结果分析

在“2.0 测试函数接口说明”中“note”栏,已经指出了这五种方法的优缺点,可以选择一下两种方案作为我们这次问题的解决方案:
  • 方案一:protobuf-c++,特点:在时间耗费和空间占用上,优势很明显,但一旦有新需求要变动,维护起来较为复杂;
  • 方案二:sproto,特点:在时间耗费和空间占用上,也非常有优势,维护起来很方便,具体请参考sproto:https://github.com/cloudwu/sproto ,pbc请参考:https://github.com/cloudwu/pbc;谢谢。

 

json, protobuf-c++,pbc,sproto 性能测试与解决方案

标签:

原文地址:http://www.cnblogs.com/xavierxia/p/4598504.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!