程序函数设计上的事务恢复与原子操作必要性

编译原理及编译器那个栏目一直空着,网站改版前是有一些文章的,改版后觉得价值不高就没有放上来,想先完成基础数据结构的函数库,可能学艺不深,一些简单的数据结构函数总是要改上很多次,本来是想从基础数据结构构建,直到一些复杂数据结构及算法的实现。事实上,问题开始逐渐凸显出来,作为一些简单的基础的数据结构,实现起来很容易,调用起来也很方便,没有什么问题,对于构筑于这些简单的数据结构上的复杂数据结构及算法貌似也实现了设想的功能,似乎这样没有问题,直到有一天我在做WEB数据库操作时想到:复杂数据及算法操作总是分成若干个操作简单数据结构的步骤,如果说这些若干步骤中,第N步出错,错误可以是内存读写失败或者权限等问题,那么对于第N步的致命错误,一般是直接返回,那么第N+1步是不会执行了,问题就在于第N-1步,如果第N-1步对原有数据造成了破坏,那么有没有类似于关系型数据库的事物恢复机制呢?如果说没有这种机制,那么在调用这个函数导致失败是小事,破坏了原有的数据就麻烦了。

可能最简单的做法就是在操作数据前对数据做一个拷贝,一旦失败并导致原有数据被破坏,则立即利用拷贝恢复被破坏的数据。数据量小的情况下这种方法确实简单方便,但是在应用复杂,数据量大的情况下,必然会导致存储空间和性能瓶颈,准备有时间好好研究一下数据库的原子操作的实现,一个可靠的数据算法函数库必须要有灾难恢复机制,否则就违背了函数设计的初衷了,即输入数据,得出正确结果,或者执行可以失败,但不能破坏了原有的数据。