首页 新闻 搜索 专区 学院

各位大牛好,问一个问题:有关程序层面的事务!

0
悬赏园豆:20 [已解决问题] 解决于 2013-08-11 22:20

想实现程序层面的事务,比如想把对几个文件的不同操作放到一个事务中,或者想把文件操作和数据库操作放到一个事务中,程序中如何自己实现的事务操作呢? 求简单回答一下,给个思路,十分感谢。

阔洋的主页 阔洋 | 初学一级 | 园豆:188
提问于:2013-08-06 12:32
< >
分享
最佳答案
0

使用 Command 模式实现事务。

Vista 以上版本 OS 支持文件事务,如果不依赖 OS 提供的事务的话,你需要自己实现文件读写的事务操作。

收获园豆:20
Launcher | 高人七级 |园豆:45045 | 2013-08-06 12:59

是的,目前我是在考虑自己实现事务,我觉得可以实现很高灵活性的事务,我用Command实现简单的Undo,Redo操作,不过我的事务如何管理呢,在内存中管理似乎并不可靠,是否应该和日志结合,让日志既起到记录操作的作用,同时依据日志来完成事务呢,这个路子是否性的通呢?....谢谢。。

阔洋 | 园豆:188 (初学一级) | 2013-08-07 13:52

@阔洋: 如果不依赖OS的事务机制,你的确需要使用日志来实现(数据库也是通过日志来回滚),命令一定要最小化(保证最大限度的原子操作),通过文件系统实现一个 command stack,用 Memory-Mapped Files 来提高写入性能,如果需要更严谨的话,你还需要考虑磁盘缓存的问题,防止断电后数据没有写入的情况发生。个人建议你用一种成熟的产品来实现 Command Stack,比如 sqlite3,Berkeley DB等。我在做升级程序时使用了 Windows INI 来实现 Command Stack,性能虽然差,好歹程序升级需要操作的文件并不算多。你也可以根据你的实际需求做出选择。

Launcher | 园豆:45045 (高人七级) | 2013-08-07 14:07
其他回答(2)
0

  文件操作和数据库操作哪能放到一个事务中?如果要保证写文件和写数据库一致。一般可以先写文件再写数据库

ia00.com | 园豆:568 (小虾三级) | 2013-08-06 12:53
0

路过

panjk | 园豆:712 (小虾三级) | 2013-08-08 09:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册