繁体   English   中英

是否可以在“普通文件系统”之上进行事务处理?

[英]Are transactions on top of “normal file system” possible?

似乎可以使用预写日志记录,两阶段提交和影子分页等技术在普通文件系统之上实现事务。

确实,这一定是有可能的,因为像InnoDB这样的事务数据库引擎可以部署在普通文件系统之上。 也有类似XADisk的库。

但是, Apache Commons Transaction状态为:

...我们坚信不能可靠地实现主要的广告功能交易文件访问。 我们坚信,在普通文件系统之上不可能有这样的实现 ...

为什么Apache Commons Transactions声称不可能在普通文件系统上实现事务?

在普通文件系统上进行交易是否不可能?

这个答案纯粹是猜测,但您可能正在比较苹果和橙子。 或更准确地说,牛奶和奶制品。

当数据库使用文件系统时,它仅在系统上使用少量预定义文件(每个数据库)。 这些包括数据文件和日志文件。 对于符合ACID的事务,绝对必要的一项操作是强制写入永久内存(磁盘或静态RAM)的能力。 而且,我认为大多数文件系统都提供此功能。

通过这种机制,数据库可以维护数据库中对象的锁,并控制对所有对象的访问。 令人高兴的是,数据库具有在文件系统之上构建的内存/页面管理层。 “数据库”本身是根据诸如页面,表和索引之类的东西而不是文件,目录和磁盘块来编写的。

更为通用的交易系统还有其他挑战。 例如,它将需要原子动作来做更多的事情。 例如,如果您“以交易方式”删除10个文件,则所有这些文件都必须同时消失。 我不认为“传统”文件系统具有此功能。

在数据库世界中,相当于删除10个表。 好的,您实际上是在使用旧表的情况下,在事务内创建没有表的系统表的新版本。 然后,您在系统表上设置了完全锁定(防止读取和写入),直到它们可用为止。 然后,您换入新的表定义(即不包含表),解锁表并清理数据。 (在这种情况下,这只是作为锁定机构的直观视图,而不是100%准确的描述。)

因此,请注意,锁定和事务已深深嵌入数据库正在执行的操作中。 我怀疑该模块的作者开始意识到,他们必须基本上完全重新实现所有现有文件系统功能以支持其事务处理-这涉及的范围太大了。

Windows在NTFS之上提供事务。 请参阅此处的描述: http : //msdn.microsoft.com/zh-cn/library/windows/desktop/bb968806%28v=vs.85%29.aspx

目前不建议使用它,并且在MSDN中对替代方案进行了广泛的讨论: http : //msdn.microsoft.com/zh-cn/library/windows/desktop/hh802690%28v=vs.85%29。 aspx

同样,如果您对文件系统进行定义,DBMS也是一种文件系统,并且文件系统(例如NTFS或ext3)也可以在DBMS的顶部(或内部)实现。 因此,Apache的声明有点不正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM