1.7和1.18写入性能差一辈,为啥?

笑天居士 发布于 2014/11/25 18:53
阅读 497
收藏 0

同一台服务器,装了一个1.18的版本和一个1.7的版本

均用自带的db_bench压测

1.7版本的就80W/s,但是1.18就只有40W,这是为什么呢?

而且用这两个版本fillsync状态下,性能都极低,但是我用PHP扩展写了个程序测试sync=true时,性能又很高,这明显不太对劲啊,为什么呢,用PHP扩展怎样能同步写入磁盘呢?


<?php
 
/* defau
lt open options */
$options = array(
    'create_if_missing' => true, // if the specified database didn't exist will create a new one
    'error_if_exists'   => false,    // if the opened database exsits will throw exception
    'paranoid_checks'   => false,
    'block_cache_size'  => 32 * 1024 * 1024,
    'write_buffer_size' => 2000 * 1024 * 1024,
    'block_size'        => 4096,
    'max_open_files'    => 1000,
    'block_restart_interval' => 16,
    'compression'       => LEVELDB_SNAPPY_COMPRESSION,
    'comparator'        => NULL,   // any callable parameter which returns 0, -1, 1
);
/* default readoptions */
$readoptions = array(
    'verify_check_sum'  => false,
    'fill_cache'        => true,
    'snapshot'          => null
);
 
/* default write options */
$writeoptions = array(
    'sync' => true,
);
 
$db = new LevelDB("/usr/local/leveldb/testdb", $options, $readoptions, $writeoptions);
 
for($j=0;$j<100;$j++){
    $ss=microtime(true);
    echo 'starting at '.$ss." ...\n";
 
    for($i=0;$i<500000;$i++){
        $db->put("Key".$j.$i, "Value");
        $db->get("Key".$j.$i);
        $db->set("Key".$j.$i, "Value");
    }
 
    $ee=microtime(true);
    echo 'complite at '.$ee." !\n";
    echo $ee-$ss . "\n";
    echo 500000/($ee-$ss)."\n";
 
    echo "sleep 10S ... \n";
    sleep(10)
}



加载中
0
旁边白
旁边白
像这样的问题一般是没有现成的答案的,这样的问题只有看源代码了。 做PHP的一般对操作系统,算法都比较熟悉,都是可以看明白的
0
笑天居士
笑天居士

谢谢回答,我明白了

$db =new LevelDB("/usr/local/leveldb/testdb",$options,$readoptions,$writeoptions);

这条语句中的$readoptions,$writeoptions并不会在后面的set/get中生效

set/get实现中会重新读传入的参数

所以正确用法是应该在set/get中传入读写选项参数

返回顶部
顶部