我写一个简单的应用程序,有24项中的散列可持续的跨程序的处决,因此Berkeley DB(DBM)应非常适合这个任务。

它只是为了好玩。

但我不知道,如果使用(与红宝石),那么当户按CTRL-C,然后执行为停止。在这种情况下,不能将数据都搞砸了?

例如,如果价值DB63,我增加它由1(64)

63 =  111111 (in binary)  
64 = 1000000 (in binary)

因此,可能的CTRL-C发生时"最重要"1是书面的,但0s没有被写的?在这种情况下,该数值在该数据库将127而不是63或64。什么如果不是红宝石但是,在C和用户使用"靠近窗口"或"杀了"杀死的过程?来想一想,硬盘驱动器可能写这个字节(或4个字节),以硬盘面的所有一次,所以这个不应该发生。

如果按CTRL-C不会造成这种情况发生,然后电力中断或自己踢的电源插头可能会导致这样的事情发生?例如,当值是第一个缓存在RAM,虽然它被写入硬盘,我打完电源插头,和硬盘驱动器失去权力之前0写的。我知道在一个一百万次,这不会发生,但这只是问题的好奇心。

另一方面,如果我的脚本

  1. 减少硬币的价值
  2. 给用户的一个"汉堡",在他的清单

然后用户按CTRL-C时,它发生在之间(1)和(2)所述,然后,用户将会有较少的硬币,并获得没有汉堡.

防止所有这些情况发生,就会使用事务方法的使用SleepyCat,源码,或MySQL,没有这些将会发生?

有帮助吗?

解决方案

没有良好的数据库系统(一个类别,包括伯克利DB)可能中断的方式你的建议,与价值的部分地更新。当你按下控制-c您不能中断的CPU中期指令。总是有一些等级的粒度的中断,和编写良好的数据库,利用这一事实,以防止该数据库以往任何时候都在不一致状态。

潜在的数据损坏和损失时存在的力量走出,但细节是否数据可能丢失或损坏有更多的与文件系统数据库文件的储存。一个很好的记录文件系统,例如,写道它是什么要做在"日刊"然后,然后将在《日刊》,它这样做。因此,如果它失去动力在写作,例如,它看起来在其杂志看到,如果有什么事情需要完成之前允许进入文件系统。这是一种过于简化,但你可以得到的详细的检查出ext3在维基百科,例如。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top