[英]Java - Fast way to store an integer in persistent media
我需要在持久媒體中存儲一個整數。 我能想到的唯一選擇是磁盤..所以我試圖在cwd中寫一個文件。
這必須盡快完成,並且需要假設文件在HD中真正同步,因為這必須是斷電安全的。
我嘗試了很多方法,但是我寫這個文件的時間不到200毫秒。
我嘗試過的:
將內容寫入文件的NAME:
File file = new java.io.File(".1234567890"); file.createNewFile();
使用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.