当前位置: 首页>数据库>正文

如何用lua生成json数据 lua转换json工具

MessagePack(简写msgpack)是一个高效的二进制序列化格式。它让你像JSON一样可以在各种语言之间交换数据。但是它比JSON更快、更小。小的整数会被编码成一个字节,短的字符串仅仅只需要比它的长度多一字节的大小。之前在lua脚本中使用过msgpack,因为有大量数据要入redis,而考虑到内存开销,使用了压缩比更大的msgpack。因为msgpack是一个二进制格式,所以没法像json后的字符串一样可直观地查看数据。

msgpack的官网地址:http://pecl.php.net/package/msgpack 里面有各PHP版本windows下的dll扩展,也有源码包供linux下编译,所以像lua这样的脚本语言可以直接使用。msgpack和json_encode都是序列化存储数据,那么msgpack的效率与json的效率相比的话到底怎么样呢?看下面这个简单的对比程序:

//msgpack与json的性能对比
//1,数据拼凑
$data =array('youku' => '优酷视频', 'pptv' => 'PPTV', 'sohu' => '搜狐视频', 'qiyi' => '奇艺视频', 'letv' => '乐视视频',
'tencent' => '腾讯视频', 'sina' => '新浪视频', 'tudou' => '土豆视频', 'm1905' => '电影网', 'cntv' => 'CNTV',);$data = json_encode($data);$newArr = array();for($i = 1; $i<=500; $i++) //修改此处$i的最大值以控制数据的大小
{$newArr [] =$data;
}//数据大小对比
$msg_data = msgpack_pack($newArr);echo "使用msgpack处理后大小:".strlen($msg_data);$json_data = json_encode($newArr);echo "
使用json处理后大小:".strlen($json_data);echo "
msgpack处理后大小与json处理后大小比为1:".round((strlen($json_data)/strlen($msg_data)),2);//计算1000次msgpack压缩用时$time = microtime(true);for($i = 1; $i<1000; $i++){
msgpack_pack($newArr);
}echo '
1000次msgpack操作用时:'.(microtime(true)- $time);//计算1000次json_encode压缩用时$time1 = microtime(true);for($i = 1; $i<1000; $i++){
json_encode($newArr);
}echo '
1000次json_encode操作用时:'.(microtime(true)- $time1);

程序过程没什么可说的了,就是先拼凑了一个数组数据(用$i来控制它的大小)。然后对比对这个数组的处理用时,如果$i很小,假如为2,得到的结果如下:

使用msgpack处理后大小:609使用json处理后大小:751msgpack处理后大小与json处理后大小比为1:1.231000次msgpack操作用时:0.054000139236451000次json_encode操作用时:0.03600001335144

从上面的结果来看,msg_pack的效率根本不如json_encode的效率,只是msg_pack的压缩率大些而已。而当我把$i改大点,比如改到500后,结果就完全反转了:

使用msgpack处理后大小:152003使用json处理后大小:187501msgpack处理后大小与json处理后大小比为1:1.231000次msgpack操作用时:0.685999870300291000次json_encode操作用时:2.2000000476837

经过多次测试,最后做两个总结如下:

1,msg_pack的压缩效率比json_encode大是毫无疑问,但压缩比我这只看到提高了20%左右,可能和数据类型有关系,这个值只供参考。

2,在数据量较小的情况下,msg_pack的效率不如json_encode.而在数据量较大时,msg_pack的效率就远大于json_encode。

3,和数据序列化一样,对数据的反序列化上,也是数量量大时,msg_unpack的效率远大于json_decode.

下面是进行反序列化时的结果:

1000次msgpack操作用时:0.803999900817871000次json_encode操作用时:2.6389999389648


https://www.xamrdz.com/database/6xg1923182.html

相关文章: