月度归档:2019年01月

打破WiredTiger的Logjam(下篇):无等待解决方案

本文的上篇探讨了WiredTiger中WAL的原始算法,该算法用于合并写操作以达到最小化I/O的目的。它没有使用耗时的锁,而是分两个阶段使用CAS原子操作来实现。只要每个核运行的线程不太多,这个算法就可以非常好地工作。但当线程数超过该限制时,它为了避免锁而依赖于忙等待的机制会导致logjam——鉴于[......]

阅读全文

打破WiredTiger的Logjam(上篇):预写式日志(The Write-Ahead Log)

你无法优化代码;优化是针对特定的条件来实现的。当条件改变时,你的优化反而可能会变为瓶颈。这时仔细审查你对这些条件的假设,其中也许就蕴藏着解决方案的关键。

WiredTiger的WAL(write-ahead log)正说明了这一原则。它是高性能存储引擎中的一个关键代码路径,我曾经对其进行了大量优化[......]

阅读全文

MongoDB从事务到复制

本文将针对MongoDB数据库,对这些问题进行更加深入的探讨。事务和复制对于很多数据库来说是共性,但每一种数据库在这两个问题的细节之处都会有各自的考量,带来了各自的特性;围绕着对共性和特性的讨论,我们将得以还原设计的权衡与思量。[......]

阅读全文