随笔分类 - Berkeley DB
摘要:本文仅仅从应用的角度来谈一谈Berkeley DB中锁相关的理论与实践经验,接下来还会有一篇博客来介绍BDB锁的内部实现。锁粒度除了Queue Access Method,其他所有的Access Pattern都是页级锁(page-level locking),而Page大小默认为操作系统filesystem的block size(Linux下默认为4K)。(可以通过减少Page大小,使一个Page上容纳更少的记录来减少页级锁粒度,但是减小Page会影响数据库的IO效率,在缺乏足够性能数据支撑的情况下,很少会这样做。) BDB的页级别的锁粒度一向是比较恼人的问题,由于Queue并不常用(ke.
阅读全文
摘要:对于提供事务支持的数据库,在事务提交时,都要确保事务日志(包含该事务所有的修改操作以及一个提交记录)完全写到硬盘上,才认定事务提交成功并返回给应用层。一个简单的问题:在*nix操作系统上,怎样保证对文件的更新内容成功持久化到硬盘?1. write不够,需要fsync一般情况下,对硬盘(或者其他持久存储设备)文件的write操作,更新的只是内存中的页缓存(page cache),而脏页面不会立即更新到硬盘中,而是由操作系统统一调度,如由专门的flusher内核线程在满足一定条件时(如一定时间间隔、内存中的脏页达到一定比例)内将脏页面同步到硬盘上(放入设备的IO请求队列)。因为write调用不会等
阅读全文
摘要:本文简单地介绍了Berkeley DB在多进程环境下的环境恢复机制。
阅读全文
摘要:实现一个开源KV数据库的想法来源于对目前项目中所使用的K-V数据库使用情况的不满意。先介绍一下我们的目前项目,作为本文的背景:较为底层的分布式运行平台,使用C/C++实现的Actor模型(异步消息传递系统)数据schema简单灵活,使用key-value能够很好表示。数据库有大量的读写请求,有事务需求,数据丢失容忍度很低。当前,从众多的KV和NOSQL存储产品中,我们使用了Berkeley DB作为底层的存储引擎。为什么选择BDB呢?1.与传统的RDBMS相比,简单K-V存储的Berkeley DB(再加入“嵌入式”直接库链接的特性)有着优越的性能,容易满足我们大量读写(尤其是大量写)的需求。
阅读全文