繁体   English   中英

Java - 在持久性媒体中存储整数的快速方法

[英]Java - Fast way to store an integer in persistent media

我需要在持久媒体中存储一个整数。 我能想到的唯一选择是磁盘..所以我试图在cwd中写一个文件。

这必须尽快完成,并且需要假设文件在HD中真正同步,因为这必须是断电安全的。

我尝试了很多方法,但是我写这个文件的时间不到200毫秒。

我尝试过的:

  1. 将内容写入文件的NAME:

     File file = new java.io.File(".1234567890"); file.createNewFile(); 
  2. 使用FileOutputStream编写文件;

     fd = new FileOutputStream(".flush", false); fd.write(1234567890); fd.flush(); fd.getFD().sync(); fd.close(); 

我知道目标机器真的很糟糕,但我正在尝试优化它。 有什么建议?

问题是您可以写入磁盘的速度。 取消要求以保持磁盘它将花费不到1/1000的时间。

如果要更快地写入实际磁盘,则需要更快的磁盘。 例如,快速SSD可以在50微秒内写入。

将速度提高到磁盘的唯一方法是在假设两台机器不会同时死亡的情况下将冗余副本发送到另一台机器。 这可能意味着使用UPS的独立电源。

如果你这样做,你可以收到另一个系统的消息,在20微秒内完成往返。


正如@Thomas建议的那样,您可以使用内存映射文件。 虽然这不应该更快,但它确实可以让你更准确地控制持久存在的内容。 例如,不需要打开和关闭文件。

提前你可以

RandomAccessFile memoryMappedFile = new RandomAccessFile(".flush", "rw");

// 4K small buffer
MappedByteBuffer buffer = memoryMappedFile.getChannel().map( FileChannel.MapMode.READ_WRITE, 0, 4 << 10);

什么时候需要写

buffer.writeLong(12345678L);
buffer.force();

由于数据持久保存到磁盘,因此除了节省资源外不需要关闭。

因此,如果您只对写入和强制进行计时,则这是保持磁盘的最小值。

暂无
暂无

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

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