我正在编写一个简单的应用程序,其中包含24个项目,以便在程序执行过程中保持不变,因此Berkeley DB(DBM)应该非常适合完成此任务。Berkeley DB的用法如何?
它只是为了好玩。
但我不知道是否使用它(与Ruby),然后当用户按下CTRL-C,然后停止执行。在这种情况下,数据无法全部搞乱?
例如,如果在DB中的值是63,并且我递增1它(是64)
63 = 111111 (in binary)
64 = 1000000 (in binary)
所以,可以在CTRL-C发生右当“最高有效” 1是书面,但0没有被写入?在这种情况下,DB中的值将是127而不是63或64.如果它不是Ruby而是C中,并且用户使用“关闭窗口”或“杀死”来终止进程呢?想想看,硬盘驱动器可能会立即将此字节(或4字节)写入硬盘表面,所以这不应该发生。
如果CTRL-C不会导致这种情况发生,那么断电或我自己踢电源插头可能会导致这种情况发生?例如,当该值首先被缓存在RAM中,并且当它被写入到硬盘时,我将电源插头拔出,并且在写入0之前硬盘驱动器断电。我知道有一百万次,这不会发生,但这只是一个好奇心的问题。
在另一方面,如果我的脚本是
- 递减硬币值
- 给用户一个“汉堡包”,在他的库存
那么当用户按下CTRL- C,它发生在上面(1)和(2)之间,那么用户将会有更少的硬币,并且不会有汉堡包。
为了防止所有这些事情发生,应该使用使用SleepyCat,SQLite或MySQL的交易方法,而这些都不会发生?