我有一个在物理机主机上运行的虚拟机(Debian)。虚拟机充当其在本地网络上频繁接收的数据的缓冲区(该数据的周期为0.5s,因此吞吐量相当高)。接收到的所有数据都存储在虚拟机上,并通过UDP反复转发到外部服务器。外部服务器确认(通过UDP)它已接收到数据包后,原始数据将从虚拟机中删除,然后不再发送到外部服务器。连接虚拟机和外部服务器的Internet连接不可靠,这意味着一次可能会断开几天。
托管VM的物理机每天随机几次断电。无法判断何时会发生这种情况,并且无法在系统中添加UPS,电池或类似解决方案。
最初,数据存储在虚拟机上基于文件的HSQLDB数据库中。但是,频繁的断电最终会导致数据库脚本文件损坏(不是在文件系统级别,即可读,但HSQLDB无法理解),这引发了我的问题:
数据应该如何存储在经常断电且经常发生的环境中?
我可以想到的一种选择是使用平面文件,将每个数据包另存为文件系统上的文件。这样,如果由于断电而损坏了文件,则可以忽略该文件,其余数据保持不变。但是,这带来了一些问题,主要与可能存储在虚拟机上的数据量有关。每条数据之间的间隔为0.5s,将在10天内生成1,728,000个文件。这至少意味着使用具有增加的inode数量的文件系统来存储此数据(当前文件系统设置用尽了大约250,000条消息和30%的磁盘空间使用了inode)。而且,很难(不是不可能)进行管理。
还有其他选择吗?是否有在Debian上运行且不会因断电而损坏的数据库引擎?此外,应为此使用什么文件系统?ext3是目前使用的。
虚拟机上运行的软件是使用Java 6编写的,因此希望该解决方案不会兼容。