DB Configure
1.Setting page size
512-64KBytes
Db::set_pagesize()
(1)Overflow Pages
Overflow Pages在Single Page不满足记录存储需要时出现,代价非常昂贵,所以应该权衡。
对于BTree,每个Page应该容纳4个实体。
(2)Locking
对于多线程或者多进程来说,同步是影响效率的关键。所以Page大小应该合适,太大了会因为page中实体过多而影响效率(Page级Locking),太小的话为因为层次太深。
(3)IO Efficiency
如果Page的Size等于OS IO block Size,则更加有利于IO的效率。
选择Page Size的原则
(1)最重要的是Page Size应该等于OS IO Block size。
(2)每个Page可以容纳4个实体为最佳,如果超过OS IO Block size,那就扩大Page的Size。
(3)如果存在大量并发,Page和data size接近比较好。
Selecting Cache Size
Db::set_cachesize() or DbEnv::set_cachesize()
2.BTree Configuration
(1) Allowing Duplicate Records
默认不支持重复。
重复的记录中,也存在序列化的和非序列化的存储顺序。基于效率来说的话,还是Sort的效率更高。
使用Db::put(),则在Sort队列的队尾;Dbc::put(),DB_AFTER,DB_BEFORE放在游标的前后,DB_KEYFIRST,DB_KEYLAST,放在重复数据集的前后。
(2)Configuring a Database to Support Duplicates
DB_DUP
The database supports non-sorted duplicate records.
DB_DUPSORT
The database supports sorted duplicate records.
3.Setting Comparison Functions
Db::set_bt_compare()
对于BTree使用Db::set_dup_compare()设置重复数据的排序