`

igbinary msgpack bson json php中使用

    博客分类:
  • PHP
阅读更多
简介

igbinary, mspack, bson在数据格式话,类似json使用


安装igbinary

#git clone https://github.com/igbinary/igbinary.git

#/usr/local/php5.3/bin/phpize

#./configure CFLAGS="-O2 -g" --enable-igbinary --with-php-config=/usr/local/php5.3/bin/php-config
#make
#make install

增加igbinary.so 到php.ini中


安装msgpack

#/usr/local/php5.3/bin/pecl install channel://pecl.php.net/msgpack-0.5.5

增加msgpack.so到 php.ini 中

安装bson
安装mongodb的php driver即可支持


使用
#!/usr/bin/env php
<?php
// Valid test types
$test_types = array(
    'json',
    'bson',
    'native',
    'igbinary',
    'msgpack',
);
 
// Get our options
$options = getopt('n:t:');
 
// Get our args and set defaults
$iterations = isset($options['n']) ? (int) $options['n'] : 20000;
$test_type  = strtolower(isset($options['t']) ? $options['t'] : $test_types[0]);
 
// Validate test type
if (!in_array($test_type, $test_types)) {
    echo 'Please choose a valid test.'. PHP_EOL.PHP_EOL;
    echo '  Valid test types: '. PHP_EOL;
 
    foreach ($test_types as $type) {
        echo '   - '. $type .PHP_EOL;
    }
 
    exit();
}
 
// Figure out the functions to use
if ($test_type === 'native') {
    $encode_function = 'serialize';
    $decode_function = 'unserialize';
} elseif ($test_type === 'msgpack') {
    $encode_function = 'msgpack_pack';
    $decode_function = 'msgpack_unpack';
} elseif ($test_type === 'igbinary') {
    $encode_function = 'igbinary_serialize';
    $decode_function = 'igbinary_unserialize';
} else {
    $encode_function = $test_type . '_encode';
    $decode_function = $test_type . '_decode';
}
 
$test_data = array(
    'meta' => array( 
        'status_code' => 200,
        'status' => 'OK',
        'message' => '',
    ),
    'data' => array( 
       array( 
            'id' => 4,
            'first_name' => 'Test',
            'last_name' => 'User',
            'access_level' => 100,
            'created_at' => 'Mon, 26 Aug 2013 20:54:29 +0000',
            'updated_at' => 'Mon, 26 Aug 2013 20:54:29 +0000',
        ),
       array( 
            'id' => 3,
            'first_name' => 'Testing',
            'last_name' => 'Suarez',
            'access_level' => 100,
            'created_at' => 'Mon, 12 Aug 2013 14:12:48 +0000',
            'updated_at' => 'Mon, 12 Aug 2013 14:13:53 +0000',
        ),
       array( 
            'id' => 2,
            'first_name' => 'Jake',
            'last_name' => 'Suarez',
            'access_level' => 100,
            'created_at' => 'Mon, 12 Aug 2013 14:12:44 +0000',
            'updated_at' => 'Mon, 12 Aug 2013 14:13:53 +0000',
        ),
        array(
            'id' => 1,
            'first_name' => 'Trevor',
            'last_name' => 'Suarez',
            'access_level' => 1000,
            'created_at' => 'Mon, 12 Aug 2013 14:12:40 +0000',
            'updated_at' => 'Thu, 29 Aug 2013 16:18:41 +0000',
        ),
    ),
    'paging' => array(
        'page' => 1,
        'per_page' => 10,
        'order_descending' => true,
    ),
);
 
// Print benchmark info
echo 'Running benchmark for...'. PHP_EOL;
echo '  '. $test_type. PHP_EOL;
echo '  '. $iterations .' times'. PHP_EOL.PHP_EOL;
 
// Start timer
$pre_test_timer = microtime(true);
 
for ($i = 0; $i < $iterations; $i++) {
    $encoded = $encode_function($test_data);
}
 
$post_encode_time = microtime(true);
 
for ($j = 0; $j < $iterations; $j++) {
    $decoded = $decode_function($encoded);
}
 
$post_decode_time = microtime(true);
 
// Print report
echo 'Test completed!!'. PHP_EOL;
echo '  Encoding time: '. ($post_encode_time - $pre_test_timer). PHP_EOL;
echo '  Decoding time: '. ($post_decode_time - $post_encode_time). PHP_EOL;
echo '  Total time:    '. ($post_decode_time - $pre_test_timer). PHP_EOL;
echo '  Encoded size:  '. (strlen($encoded)). ' bytes'. PHP_EOL;
echo PHP_EOL;



测试输出
$ ./bench.php -n 50000 -t native
Running benchmark for...
  native
  50000 times

Test completed!!
  Encoding time: 0.53830790519714
  Decoding time: 0.54197597503662
  Total time:    1.0802838802338
  Encoded size:  1078 bytes

$ ./bench.php -n 50000 -t json
Running benchmark for...
  json
  50000 times

Test completed!!
  Encoding time: 0.66888904571533
  Decoding time: 1.1631889343262
  Total time:    1.8320779800415
  Encoded size:  778 bytes

$ ./bench.php -n 50000 -t igbinary
Running benchmark for...
  igbinary
  50000 times

Test completed!!
  Encoding time: 0.69265794754028
  Decoding time: 0.39665293693542
  Total time:    1.0893108844757
  Encoded size:  491 bytes

$ ./bench.php -n 50000 -t bson
Running benchmark for...
  bson
  50000 times

Test completed!!
  Encoding time: 0.31515908241272
  Decoding time: 0.34058809280396
  Total time:    0.65574717521667
  Encoded size:  824 bytes

$ ./bench.php -n 50000 -t msgpack
Running benchmark for...
  msgpack
  50000 times

Test completed!!
  Encoding time: 0.30013704299927
  Decoding time: 0.50173997879028
  Total time:    0.80187702178955
  Encoded size:  645 bytes



总结:
从运行性能在看来:bson > msgpack > igbinary > navtive > json
从格式话数据大小:igbinary < msgpack < bson < json < navtive
分享到:
评论

相关推荐

    PHP php_igbinary.dll PHP5.4以上所有版本扩展

    PHP php_igbinary.dll PHP5.4以上所有版本扩展分别包括 php_igbinary-2.0.1-5.5-nts-vc11-x86 php_igbinary-2.0.1-5.5-ts-vc11-x64 php_igbinary-2.0.1-5.5-ts-vc11-x86 php_igbinary-2.0.1-5.6-nts-vc11-x64 ...

    php_igbinary.dll 5.5-x86 php_redis.dll 5.5-5.6 X86 64

    才能在PHP环境中使用。 在实际应用中,为了使用这两个扩展,你需要确保你的PHP环境满足以下条件: 1. PHP版本匹配:文件名中的“5.5-x86 64”和“5.5-5.6”表明这些扩展适用于PHP 5.5到5.6的64位版本。 2. 系统架构...

    php_redis.dll和php_igbinary.dll-php5.6版下载

    文件列表: php_igbinary-1.2.1-5.5-nts-vc11-x64 php_igbinary-1.2.1-5.5-nts-vc11-x86 php_igbinary-1.2.1-5.5-ts-vc11-x64 php_igbinary-1.2.1-5.5-ts-vc11-x86 php_redis-2.2.7-5.6-nts-vc11-x64 ...

    php_redis.dll和php_igbinary.dll

    标题中的"php_redis.dll"和"php_igbinary.dll"是PHP扩展库的动态链接库文件,用于在PHP环境中支持Redis和Igbinary数据序列化协议。这些扩展库是PHP与特定服务或功能交互的关键组件。 PHP是广泛使用的服务器端脚本...

    php_igbinary-php5.5版本

    **igbinary扩展** 在PHP中,igbinary作为一个扩展存在,可以替换默认的序列化机制。安装igbinary扩展后,你可以通过`igbinary_serialize`和`igbinary_unserialize`函数来序列化和反序列化PHP变量。这样,当你的应用...

    php_igbinary.dll、php_redis.dll

    例如,可以使用igbinary将PHP对象序列化后存储在Redis中,利用Redis的高速缓存能力提高应用程序的响应速度,同时由于igbinary的高效序列化,进一步降低了内存和网络传输的开销。 安装这两个扩展通常需要将对应的`....

    php5.6下的redis扩展(redis/php_redis.dll/php_igbinary.dll)windows环境

    igbinary是一个序列化库,它优化了PHP对象和数据结构在Redis中的存储。相比于默认的PHP序列化(serialize/unserialize),igbinary能显著减少存储空间并提高序列化/反序列化的速度。启用igbinary扩展同样需要在`...

    php_igbinary.dll + php_redis.dll [php 5.4 ]

    内容包括2个文件(igbinary.dll + php_redis.dll),在开发过程中找了很久,花了积分,才凑齐这2个文件。我的PHP版本是5.4.22,可以正常使用。我很少上传资源,只有花费了不少时间寻找的才会上传,当然也一定是自己...

    php_igbinary2.0.5合集(适合PHP5.6-7.2)

    3. **Docker**:对于使用Docker的开发者,可以在Dockerfile中添加相应的RUN指令来安装igbinary扩展。 4. **预编译二进制包**:对于某些Linux发行版,可能提供预编译的二进制包,可以通过包管理器(如apt-get或yum)...

    php_igbinary

    php_redis-2.2.5-5.6-ts-vc11-x64.zip php_redis-2.2.5-5.6-ts-vc11-x86.zip php_igbinary-1.1.1-5.6-ts-vc11-x86.zip php_igbinary-1.1.1-5.6-ts-vc11-x64.zip

    php_igbinary1.2.1合集(支持PHP5.3-5.5)

    要在PHP中使用igbinary扩展,首先需要安装并启用它。对于PHP 5.3到5.5的版本,可以通过以下步骤进行: 1. **下载源码**: 从官方仓库或者第三方镜像站点获取php_igbinary1.2.1的源码包。 2. **编译与安装**: 使用`...

    php_redis.dll和php_igbinary.dll版下载,包含各个系统版本

    php_igbinary-1.2.1-5.5-nts-vc11-x64 php_igbinary-1.2.1-5.5-nts-vc11-x86 php_igbinary-1.2.1-5.5-ts-vc11-x64 php_igbinary-1.2.1-5.5-ts-vc11-x86 php_redis-2.2.7-5.6-nts-vc11-x64 ...

    php_igbinary.dll

    - **快速传输**:由于使用二进制格式,在网络传输中,igbinary的数据传输速度更快,尤其在高并发环境下优势明显。 - **兼容性**:igbinary可以无缝替换默认的序列化机制,无需修改代码即可实现性能提升。 - **跨...

    php_igbinary-1.1.1到2.0.8版本大全

    - 缓存系统:在Memcached、Redis等缓存服务中使用igbinary,可以降低网络带宽消耗,提高响应速度。 - 服务间通信:在分布式系统中,通过igbinary序列化数据,减少通信成本。 7. **注意事项** - igbinary序列化的...

    php_igbinary-2.0.7-7.0-ts-vc14-x86

    8. igbinary.php:可能是一个示例脚本或者测试文件,展示了如何在PHP中使用igbinary扩展。 9. tags.sh:这可能是一个用于生成或管理软件版本标签的脚本。 10. igbinary.spec:在RPM包管理系统中,spec文件定义了...

    php_igbinary-1.2.1-5.5-nts-vc11-x64

    该资源是php的igbinary扩展,解压将里面的php_igbinary.dll和php_igbinary.pdb文件放到php安装目录下的ext文件中即可,然后需要在php.ini中加上extension=php_igbinary.dll

    redis扩展php_igbinary

    在PHP环境中安装`igbinary`扩展通常需要通过编译源代码或使用预编译的二进制包完成。对于Windows用户,可以下载预编译的DLL文件,将其放到PHP的`ext`目录下,并在php.ini中添加以下行启用扩展: ``` extension=...

    php_igbinary 5.3-7.1版本扩展

    1. **缓存系统**: 在Memcached或Redis等缓存系统中,使用igbinary可以减少数据存储的大小,提高缓存命中率,并加快读写速度。 2. **分布式系统**: 在分布式环境中,igbinary可用于跨服务器的数据交换,减小网络传输...

    php_igbinary.dll与vc9编译redis.dll扩展适合php5.3

    重启服务器后,你就可以在PHP代码中使用`igbinary`和`redis`的功能了。 总之,`igbinary`和`redis`扩展是提高PHP性能和功能的利器,尤其在处理大量数据序列化和与Redis数据库交互时。了解这些扩展的特性、版本兼容...

Global site tag (gtag.js) - Google Analytics