lor*_*nzo 5 java vmware flush nas
我正在寻找一个"技巧"或"黑客"来确定文件是否已经保存在远程磁盘上,通过vmware缓存,NAS缓存等.
刷新和关闭FileOutputStream是不够的.我认为Channel.force(true)既不是.
我正在考虑这样的事情:
也许有人有同样的问题,并找到了解决方案.
我的要求是不要丢失数据.java应用程序以这种方式工作:
今晚我们遇到了崩溃,并且在第5步之后但是在将数据实际刷新到远程存储之前有三次交易失败.所以数据库说一切都很好,远程端被告知相同,但15秒的签名数据丢失了.这不好.
正确的解决方案可能是对远程文件系统进行"同步安装".但这不会在短时间内发生.即使在这种情况下,鉴于应用程序在VMWare服务器上运行,我也不完全信任这种情况.
因此,我希望有一个"尽力而为"的黑客来防止(缓解)像这样的事件.
小智 2
让我们从一个假设开始:您无法保证对任何单个磁盘的任何单次写入。在写入和磁盘盘片之间有太多的软件和硬件层。即使你能保证写入,你也不能保证数据可读。磁盘有可能在写入和读取之间崩溃。
唯一的解决方案是冗余,由框架(例如 RDMS)或您的应用程序提供。
当您收到并签署文件时,您需要将其发送到不同物理主机上的多个目的地,并等待它们回复已保存文件。其中之一可能会崩溃。其中两个可能会崩溃。数据的重要性将决定您需要多少远程主机。
顺便说一句,冗余也适用于您的数据库。事实上,提交的事务并不意味着您能够在数据库崩溃后恢复它(尽管 DBMS 工程师在确保写入方面比您或我拥有更多的经验,但这一切都取决于了解事物的系统管理员就像“日志和数据文件必须驻留在单独的物理驱动器上)。我强烈建议您(冗余地)将足够的元数据与文件一起存储,以便能够重建数据库条目。