假设我有两个过程。其中之一是不断地将数据写入目录中的文件(为了便于讨论,我们将它们称为日志文件),在该目录中,新文件经常会启动。其中一个文件是当前的“活动”文件,该文件每秒钟左右被自动写入新数据。 “活动”文件将始终处于干净状态。
第二个过程从目录中的文件(包括“活动”文件)读取数据。假设它需要多次读取文件,但是又需要“冻结”的文件一致视图,包括实时文件。即使在读取器进程运行时正在更新“活动”文件,读取器一旦开始从文件中读取文件,它仍需要查看其启动时的状态(就像未发生新写入一样)。 / p>
不幸的是,读取器和写入器过程都来自我无法更改的第三方库。我需要找到一种方法来协调我的应用程序中的两个过程,并使它们协同工作。
我的应用程序(启动第3方库的读取器和写入器进程)是用Java编写的,并在Ubuntu Linux上运行。
我的想法:我正在寻找与数据库事务类似的东西,并且具有一致的读取能力,但需要文件系统。
问题:
我想做类似的事情:
public String launchReaderWithConsistenData(String folderPath) {
ConsistentFolder consistentDataFolder = OS.getConsistentReferenceTo(folderPath);
String readData = ThirdPartyLibrary.readSomeData(consistentDataFolder.getPath());
consistentDataFolder.release();
return readData;
}
当然,“ ConsistentFolder”和“ getConsistentReferenceTo()”是我组成的,但是希望它们类似,如果ThirdPartyLibrary.readSomeData()从文件中多次读取,它将始终获得相同的数据,即使原始folderPath中的数据在两次更新之间也是如此。
除上述内容外,我唯一的其他想法是为读取器的每个调用创建目录的新物理副本,但是我担心这样做会效率低下,因为文件会很大。