CouchDB 的仅崩溃设计是为了耐用性,为什么?



当我研究couchDB的耐用性时,我发现couchDB使用仅碰撞设计来获得耐用性。但我不知道碰撞和耐久性之间有什么关系。

通过阅读CouchDB 的Wiki

CouchDB文件布局和承诺系统具有所有原子一致隔离耐用(ACID)属性。在磁盘上,CouchDB从不覆盖提交的数据或相关结构,确保数据库文件始终处于一致状态。这是一种"仅崩溃"的设计,CouchDB服务器不经过关闭过程,只是被终止

持久性是由DB始终处于一致状态这一事实给出的,而这是由DB的结构仅附加(CouchDB never overwrites committed data or associated structures)这一事实提供的。这使得错误处理非常容易:如果出现错误,它可能会立即崩溃。

我不认为是"仅碰撞"带来了耐用性。我认为耐久性允许使用"仅碰撞"。

相反的做法意味着要聪明一点,添加错误恢复代码。这需要您正确地识别错误,并正确地假设恢复算法。恢复过程的每一部分都可能引入错误。当错误实际上是另一种错误时,您可能会认为它是某种类型的,或者在进行恢复时可能会发生新的意外错误。

错误恢复还意味着不仅要尝试重做失败的事务。您还必须找到原始错误,该错误可能来自某个意外的程序或硬件状态,并修复该状态。否则,同样的错误可能再次发生。

崩溃只会降低出现错误的概率,您不需要找到所有出现错误的边缘案例,您的系统管理员可以很容易地收到错误通知(可能是硬件错误!)。考虑到这一点,在某些情况下,崩溃可能只是一个合理的软件设计原则。至少这样可以更容易地保证数据的完整性。

最新更新