wiki:KeyValueBenchmark

KeyValue存储方案最简对比

目的

  • 对比自己使用过的几种Key-Value存储方案最简情景中的效率.

环境

  • 硬件:
    • CPU: Intel(R) Core(TM)2 Duo CPU E7200 @ 2.53GHz
    • MEMORY: 2GB
    • HD : ST3250310AS
  • 软件:
    • OS: i386 Linux 2.6.31
    • Python: 2.6.4 / py-redis 0.6.1 / cmemcache r 431 / mysql-py 1.2.2 /PyMongo? v1.6
    • Redis:1.02
    • Memcached: 1.2.8
    • Mysql: 5.1.37
    • mongoDB: 1.4.2

KEY-VALUE 数据SET,GET

对 Redis,Memcache,MySQL(myisam table),MySQL(memory table),MongoDB分别以5个线程进行各100000次set/get

  • 测试脚本:
  • Mysql Schema:
    CREATE DATABASE IF NOT EXISTS key_value_benchmark;
    USE key_value_benchmark;
    CREATE TABLE  `key_value_benchmark`.`memory_table` (
      `key` varchar(512) NOT NULL,
      `value` varchar(512) DEFAULT NULL,
      PRIMARY KEY (`key`)
    ) ENGINE=MEMORY DEFAULT CHARSET=latin1;
    CREATE TABLE  `key_value_benchmark`.`myisam_table` (
      `key` varchar(512) NOT NULL,
      `value` varchar(512) DEFAULT NULL,
      PRIMARY KEY (`key`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    

测试结果图表

  • 蓝色: redis
  • 黑色: memcached
  • 橙色: mysql(myisam)
  • 黄色: mysql(memory)
  • 绿色: mongodb
耗时(妙)redismemcachedmysql(myisam)mysql(memory)mongodb
set2312514019
get2610867651

原始测试结果

redis

set:

lvs@lvs-dell:~/temp/nosql-benchmark$ python redis_benchmark.py set 5 100000
Got  0 set 23.7233541012
Got  1 set 24.1076848507
Got  2 set 23.5855329037
Got  3 set 22.3091208935
Got  4 set 21.5657048225
avg time is :  23.0582795143	

get:

lvs@lvs-dell:~/temp/nosql-benchmark$ python redis_benchmark.py get 5 100000
Got  0 get 27.0135290623
Got  1 get 27.0588710308
Got  2 get 26.8619720936
Got  3 get 26.7981190681
Got  4 get 26.6335082054
avg time is :  26.873199892

memcacache

set:

lvs@lvs-dell:~/temp/nosql-benchmark$ python memcache_benchmark.py  set 5 100000
Got  0 set 14.4166228771
Got  1 set 9.91025304794
Got  2 set 11.627767086
Got  3 set 11.3887419701
Got  4 set 14.8926529884
avg time is :  12.4472075939

get:

lvs@lvs-dell:~/temp/nosql-benchmark$ python memcache_benchmark.py  get 5 100000
Got  0 get 11.9404599667
Got  1 get 10.1794390678
Got  2 get 10.2537441254
Got  3 get 11.7703640461
Got  4 get 10.2396869659
avg time is :  10.8767388344

mysql isam

set:

lvs@lvs-dell:~/temp/nosql-benchmark$ python mysql_benchmark.py  myisam set 5 100000
table_type: myisam
Got  0 set 50.7731218338
Got  1 set 51.2120161057
Got  2 set 50.7763359547
Got  3 set 50.4115722179
Got  4 set 50.8741919994
avg time is :  50.8094476223

get:

lvs@lvs-dell:~/temp/nosql-benchmark$ python mysql_benchmark.py  myisam get 5 100000
table_type: myisam
Got  0 get 84.6942389011
Got  1 get 86.7919590473
Got  2 get 86.3120980263
Got  3 get 85.7578771114
Got  4 get 85.3862650394
avg time is :  85.7884876251

mysql memory

set:

lvs@lvs-dell:~/temp/nosql-benchmark$ python mysql_benchmark.py  memory set 5 100000
table_type: memory
Got  0 set 40.0606198311
Got  1 set 38.1395039558
Got  2 set 40.2925269604
Got  3 set 39.4340929985
Got  4 set 40.7070069313
avg time is :  39.7267501354

get:

lvs@lvs-dell:~/temp/nosql-benchmark$ python mysql_benchmark.py  memory get  5 100000
table_type: memory
Got  0 get 74.5096290112
Got  1 get 76.852478981
Got  2 get 76.7772979736
Got  3 get 75.4090471268
Got  4 get 76.0928859711
avg time is :  75.9282678127

mongodb

set :

lvs@lvs-dell:~/temp/nosql-benchmark$ python mongodb_benchmark.py set 5 100000
Got  0 set 19.2554059029
Got  1 set 19.409537077
Got  2 set 18.8321840763
Got  3 set 19.3562998772
Got  4 set 18.2492520809
avg time is :  19.0205358028

get:

lvs@lvs-dell:~/temp/nosql-benchmark$ python mongodb_benchmark.py get 5 100000
Got  0 get 51.4534339905
Got  1 get 51.1660151482
Got  2 get 51.386808157
Got  3 get 51.3365850449
Got  4 get 51.4308290482
avg time is :  51.3547342777

TODO

  • 服务端,客户端分离
  • 多进程并发
  • 测试数据量,速度相关性
  • 更复杂的测试用例

Other

Attachments