leveldb和mapkeeper相连参数设置

本文详细介绍LevelDB数据库的参数调优过程,包括如何修改max_file_size、block_size等关键参数,以及使用Bloom过滤器提高查询效率。通过YCSB工具批量测试不同工作负载,如A、B、C等,展示调优前后性能对比,并提供具体测试脚本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先在测试时为了保证参数和你的数据库保持一致。比如options.max_file_size,options.block_size等等参数,需要在mapkeeper/leveldb下的leveldbserver.cpp中修改相应的参数或者是添加相应的参数。值得注意的是,在调用filter_policy方法的时候,单纯的调用是会报错的,所以需要在前面添加两行:

#include <leveldb/filter_policy.h>
using namespace leveldb;

我设置的参数如下:

  leveldb::Options options;
        options.create_if_missing = true;
        options.error_if_exists = false;
        options.max_file_size = 64 * 1024 * 1024;
        options.block_size = 4096;
        options.write_buffer_size = 64 * 1024 * 1024; // 64MB write buffer
        options.block_cache = leveldb::NewLRUCache(10000L * 1048576L);  // 1.5GB cache
        options.compression = leveldb::kNoCompression;
        const FilterPolicy *filter_policy_ = NewBloomFilterPolicy(10);
        options.filter_policy = filter_policy_;

在输入指令进行参数设置时,有我改进了之前网上的leveldbserver,改进后的leveldbserver可以在“我的下载”中下载。改进之后在指令执行的后面加上了四种参数,包括sync(是否进行同步,我设置的0表示不同步),blindinsert(是否盲插,设置的是1),blindupdate(是否盲更新,设置的是1),path(数据库数据log路径)。如果设置成sync = 1的话在进行load100M数据时,执行一天左右的时间(我的内存是32g,centos7)。

 ./mapkeeper_leveldb 0 1 1 /home/hsk/kvstore/software/mapkeeper/leveldb/data

这是我在mapkeeper下执行的命令,如果下载了我优化后的leveldbserver,需要重新执行make操作,生成新的mapkeeper_leveldb,然后再执行上面的操作。

然后在ycsb文件夹中新建一个批量load,run工作负载文件的脚本,记住在每次run完一个工作负载文件之后清空数据库数据log路径,(因为不清空的话很有可能会报错)。

bin/ycsb load mapkeeper -s -P workloads/workloada -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_leveldb/1_load.txt 2>&1
bin/ycsb run mapkeeper -s -P workloads/workloada -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_leveldb/1_run.txt 2>&1
rm -rf /home/hsk/kvstore/software/mapkeeper/leveldb/data/*
bin/ycsb load mapkeeper -s -P workloads/workloadb -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_leveldb/2_load.txt 2>&1
bin/ycsb run mapkeeper -s -P workloads/workloadb -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_leveldb/2_run.txt 2>&1
rm -rf /home/hsk/kvstore/software/mapkeeper/leveldb/data/*
bin/ycsb load mapkeeper -s -P workloads/workloadc -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_leveldb/3_load.txt 2>&1
bin/ycsb run mapkeeper -s -P workloads/workloadc -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_leveldb/3_run.txt 2>&1
rm -rf /home/hsk/kvstore/software/mapkeeper/leveldb/data/*
bin/ycsb load mapkeeper -s -P workloads/workloadd -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_leveldb/4_load.txt 2>&1
bin/ycsb run mapkeeper -s -P workloads/workloadd -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_leveldb/4_run.txt 2>&1
rm -rf /home/hsk/kvstore/software/mapkeeper/leveldb/data/*
bin/ycsb load mapkeeper -s -P workloads/workloade -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_leveldb/5_load.txt 2>&1
bin/ycsb run mapkeeper -s -P workloads/workloade -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_leveldb/5_run.txt 2>&1
rm -rf /home/hsk/kvstore/software/mapkeeper/leveldb/data/*
bin/ycsb load mapkeeper -s -P workloads/workloadf -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_leveldb/6_load.txt 2>&1
bin/ycsb run mapkeeper -s -P workloads/workloadf -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_leveldb/6_run.txt 2>&1
rm -rf /home/hsk/kvstore/software/mapkeeper/leveldb/data/*

然后执行:

chmod 777 run.sh
./run.sh

 

leveldb实现解析 淘宝-核心系统研发-存储 那岩 neveray@gmail.com 2011-12-13 目录 一、 代码目录结构 ....................................................................... 1 1. doc/ ............................................................................ 1 2. include/leveldb/ ................................................................. 1 3. db/ ............................................................................. 1 4. table/........................................................................... 1 5. port/ ........................................................................... 1 6. util/ ........................................................................... 1 7. helper/memenv/ ................................................................... 1 二、 基本概念 .......................................................................... 1 1. Slice (include/leveldb/slice.h) .................................................. 1 2. Option (include/leveldb/option.h) .............................................. 2 3. Env (include/leveldb/env.h util/env_posix.h) .................................... 3 4. varint (util/coding.h) ........................................................... 3 5. ValueType (db/dbformat.h) ...................................................... 3 6. SequnceNnumber (db/dbformat.h) ................................................. 4 7. user key......................................................................... 4 8. ParsedInternalKey (db/dbformat.h) .............................................. 4 9. InternalKey (db/dbformat.h) ...................................................... 4 10. LookupKey (db/dbformat.h) ........................................................ 4 11. Comparator (include/leveldb/comparator.h util/comparator.cc) .................... 4 12. InternalKeyComparator (db/dbformat.h) ............................................ 5 13. WriteBatch (db/write_batch.cc) ................................................. 5 14. Memtable (db/memtable.cc db/skiplist.h) .......................................... 5 15. Sstable (table/table.cc) ......................................................... 5 16. FileMetaData (db/version_edit.h) ............................................... 5 17. block (table/block.cc) ........................................................... 6 18. BlockHandle(table/format.h) ...................................................... 6 19. FileNumber(db/dbformat.h) ...................................................... 6 20. filename (db/filename.cc) ........................................................ 6 21. level-n (db/version_set.h) ....................................................... 7 22. Compact (db/db_impl.cc db/version_set.cc) ........................................ 7 23. Compaction(db/version_set.cc) .................................................... 7 24. Version (db/version_set.cc) ...................................................... 8 25. VersionSet (db/version_set.cc) ................................................. 9 26. VersionEdit(db/version_edit.cc) ................................................. 10 27. VersionSet::Builder (db/version_set.cc) ......................................... 11 28. Manifest(descriptor)(db/version_set.cc)...................................... 12 29. TableBuilder/BlockBuilder(table/table_builder.cc table/block_builder.cc) ......... 12 30. Iterator (include/leveldb/iterator.h) ........................................... 12 三、 存储结构的格式定义与操作 .......................................................... 12 1. memtable (db/skiplist.h db/memtable) ............................................ 12 2. block of sstable (table/block_builder.cc table/block.cc) ......................... 14 3. sstable (table/table_bulder.cc/table.cc) ........................................ 16 4. block of log (db/log_format.h db/log_writer.cc db/log_reader.cc) .............. 18 5. log (db/log_format.h db/log_writer.cc db/log_reader.cc) ........................ 18 6. cache(util/cache.cc) .......................................................... 19 7. Snapshot (include/leveldb/snapshot.h) ......................................... 19 8. Iterator (include/leveldb/iterator.h) ........................................... 19 四、 主要流程 ......................................................................... 24 1. open ........................................................................... 24 2. put ............................................................................ 25 3. get ............................................................................ 25 4. delete.......................................................................... 26 5. snapshot........................................................................ 26 6. NewIterator ..................................................................... 26 7. compact......................................................................... 26 五、 总结 ............................................................................. 30 1. 设计/实现中的优化 ............................................................... 30 2. 可以做的优化 .................................................................... 31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值