Home

undo 日志和redo 日志

具体的可以看这里,解释几个作者没解释清楚的问题: 只用REDO日志为什么数据修改要每次修改刷盘 如果不刷盘,不会导致数据不一致,但是数据修改过程相当于写redo日志-修改内存-写commit日志(修改内存的顺序也无所谓了),这个过程结束已经应答用户了,但是修改没有刷下去断电恢复的话也无法通过redolog恢复到当前状态,所以会丢失修改。 修改数据和写redo/undo log/commit log之间的关系是什么 任何对磁盘的数据修改落实之前都需要先写log,无论是redo还是undo。undo保证了一旦数据写了一半(脏数据)能够回滚,redo保证了写了日志的事务能够回放出来。 只使用undo的时候commit日志要等...

Read more

发两张静物

发两张静物,镜头宾得 SMC FA 50mm F1.4 转一张网上的图,我觉得拍的极好(当然模特漂亮是主要的):

Read more

关于备份文件管理

最近在写一个备份的工作,备份线程每次会把需要备份的数据写到文件,同时需要保存一定数量的旧文件。 首先为了写失败的时候不会损坏之前的旧备份文件,我们需要写一个临时文件然后覆盖回去。同时,为了保存旧文件,需要每次写一个不同的文件,同时维护一个当前的最新文件,然后删除超过了一定期限的文件,假定临时文件名是file.bin.2014xxxx,最新文件名是file.bin,有如下三个方法: 每次写临时文件,同时写一个内容一样的file.bin。造成空间浪费。 每次写临时文件,同时更新软链接file.bin。不兼容非linux系统。 写manifest,文件内容是当前最新文件名。比较麻烦。 最后还是按2方案实现的,代码如下:

Read more

跟事务相关的一些文章

主要纪录一下跟事务相关的一些文章。主要是博客,有论文加论文。顺便纪念下女神订婚。图是转载。 参考文献: [1] 数据库事务隔离级别和锁实现机制, http://comedsh.iteye.com/blog/698733 [2] 数据库事务的实现(一) 故障恢复 (undo日志), http://www.cnblogs.com/clam/archive/2012/08/27/2657943.html [3] 数据库事务的实现-故障恢复(二)(undo日志检查点), http://www.cnblogs.com/clam/archive/2012/08/27/2657944.html [4] 为 Key-Value 数据库实现MVCC 事务, http://juliashin...

Read more

NVI的应用-虚函数模板

我们有时候需要把一个模板函数实现为虚函数,但是C++不支持模板虚函数(至少目前是),所以需要一些方法绕过去。以下是郁白师兄提供的解决方案,确实比较巧妙,之前没想过NVI(NonVirtual Interface)能解决这个问题。 class IAllocator { public: virtual ~IAllocator() {}; virtual void *alloc(const int64_t size) = 0; }; template <class T> class TAllocator : public IAllocator { public: TAllocator(T &allocator) : allocator_(...

Read more

github/gitcafe pages域名设置

A纪录和CNAME 裸域名只能绑定 DNS 的 A 记录,不能绑定 CNAME 记录。也就是说你不能把裸域设定为另外域名的别名。很多时候这对管理不是很方便,特别是使用第三方托管服务的时候。如果第三方迁移服务器导致 IP 地址变更,你必须自己去更改 DNS 的 A 记录。引用自参考文献1 gitcafe pages 域名配置 example.com. 1684 IN A 117.79.146.98 www.example.com. 3581 IN CNAME example.gitcafe.com. example.gitcafe.com. 560 IN A 117.79.146.98 gitcafe文档说: 如果你想绑定 www 子域名, 你需要将此 w...

Read more