读 修改 写 基准测试

配置

我们在以下机器上运行基准测试:

  • 16 CPUs, HT(Hyper-Threading) enabled (超线程开启) -> 32 vCPUs, Intel Xeon E5-2660 @ 2.20GHz
  • LSI 1.8T 闪存卡
  • 144GB 内存
  • Linux 3.2.45

这些基准测试的目标是演示合并操作符在读写工作负载(例如计数器)上的优势。这两个基准测试都是使用一个线程执行的。

随机更新基准测试

我们运行”update random”基准测试,执行50,000,000次迭代:

  1. 1.读取随机key
  2. 2.向随机key写入一个新值

每个值为8字节,模拟uint64_t计数器。写前日志被关闭。

以下是我们使用的准确基准参数:

  1. bpl=10485760;overlap=10;mcz=2;del=300000000;levels=6;ctrig=4; delay=8; stop=12; mbc=20; r=50000000;
  2. t=10; vs=8; bs=65536; si=1000000; time ./db_bench --benchmarks=updaterandom --disable_seek_compaction=1 --mmap_read=0
  3. --statistics=1 --histogram=1 --num=$r --threads=$t --value_size=$vs --block_size=$bs --db=/data/sdb/ --disable_wal=1
  4. --stats_interval=$si --max_background_compactions=$mbc --level0_file_num_compaction_trigger=$ctrig --level0_slowdown_writes_trigger=$delay
  5. --level0_stop_writes_trigger=$stop --num_levels=$levels --delete_obsolete_files_period_micros=$del --min_level_to_compress=$mcz --max_grandparent_overlap_factor=$overlap
  6. --stats_per_interval=1 --max_bytes_for_level_base=$bpl --use_existing_db=0

以下是基准测试的结果:

  1. 29.852 micros/op 33498 ops/sec; ( updates:50000000 found:45003817)
  2. 总时间24846

随机更新合并操作

使用merge操作符,我们可以只使用一个操作符执行read-modify-write。在这个基准测试中,我们执行了50.000.000次迭代:

  • 对随机密钥执行 “uint64add” 合并操作符,该操作符向与该密钥关联的值添加1

与之前的基准测试一样,每个值都是8字节,并关闭了Write Ahead日志。

以下是我们使用的准确基准参数:

  1. bpl=10485760;overlap=10;mcz=2;del=300000000;levels=6;ctrig=4; delay=8; stop=12; mbc=20; r=50000000; t=10; vs=8; bs=65536; si=1000000;
  2. time ./db_bench --benchmarks=mergerandom --merge_operator=uint64add --disable_seek_compaction=1 --mmap_read=0 --statistics=1 --histogram=1 --num=$r --threads=$t
  3. --value_size=$vs --block_size=$bs --db=/data/sdb --disable_wal=1 --stats_interval=$si --max_background_compactions=$mbc --level0_file_num_compaction_trigger=$ctrig
  4. --level0_slowdown_writes_trigger=$delay --level0_stop_writes_trigger=$stop --num_levels=$levels --delete_obsolete_files_period_micros=$del --min_level_to_compress=$mcz
  5. --max_grandparent_overlap_factor=$overlap --stats_per_interval=1 --max_bytes_for_level_base=$bpl --use_existing_db=0

以下是基准测试的结果:

  1. 9.444 micros/op 105892 ops/sec; ( updates:50000000)
  2. 总用时78分钟53