您需要一個10^10 4個字節的整數數組作爲查找表。加載到RAM將需要40GB,這是不可行的。初始化完成後,您永遠不需要寫入該數組。您需要從單個進程的多個線程同時讀取此數組中隨機位置的單個整數值。你保證在64位平臺上。這個查詢表的最快實現是什麼?使用常規文件讀取功能或例如提升內存映射文件?基於文件的查找表
Q
基於文件的查找表
3
A
回答
1
這聽起來像你應該做明確的讀取。內存映射可以避免一次導入大量頁面(我相信Windows對256KiB的支持,對其他平臺不太確定),並允許您在第一次使用後不會再受到任何處罰,從而重新訪問它們。
如果您只是從隨機位置讀取整數,您將以256KB讀取一頁中僅4個字節,甚至可能無法重新訪問它。太浪費了!另外還要考慮你還從其他應用程序和文件系統緩存中分出了很多可能有用的數據。
1
由於文件一旦創建,你只需要以只讀的方式訪問它,我不認爲你會想要一個內存映射文件,升壓或其他費用。如果您有多個想要併發訪問相同數據的進程,那將會更有用。在你的情況下,你只有只讀線程,所以一個簡單的40g文件應該是最簡單和最快的。
相關問題
- 1. 基於文件的查找表
- 2. 查找基於全局的文件
- 3. 查找基本文件名
- 4. 如何從另一個表中查找基於查找的值?
- 5. MongoDB查找基於文檔密鑰
- 6. 查找基於文本內容
- 7. ActiveRecord的查找與條件基於具有在列表
- 8. 查找包含類的文件(基於__autoload),但不包含它
- 9. bash腳本查找文件名中的基於日期的舊文件
- 10. 查看基於兩個表的條件
- 11. 查找基於給定值
- 12. 帳戶基於查找
- 13. 查找基於幾列r
- 14. 查找基於價值
- 15. PHP - 查找基於範圍
- 16. 查找文件夾備份基於預定義的文件夾結構
- 17. 基於時間尋找音頻文件
- 18. 查詢 - 基於行的表
- 19. 基於其他的獅身人面像表查找表
- 20. 基於配料的基於PHP和MySQL的食譜查找器
- 21. 查找基於部分文件名的文件,並在文件的其他地方移動文件
- 22. 查找不等於圖案的文件
- 23. 的SQL Server:查找基於值一列
- 24. 查找基於相鄰值的元素
- 25. SQL:查找基於以前的ID
- 26. 基於其他列的Sharepoint列查找
- 27. jquery查找基於「對齊」的圖像
- 28. Excel中基於多列的查找
- 29. 查找基於集團的貓鼬
- 30. 基於時間的查找日期
這個數組假設要存儲/做什麼? – 2012-02-13 21:20:19
對於隨機訪問,我猜想定期流IO。如果沒有訪問模式,內存映射不會有太大幫助,並且它不適合(大部分)在RAM中(據我所知)。 – 2012-02-13 21:20:40
@Jim Fell:該數組用於將索引值x映射到f(x),其中f是非常慢的函數,因此它不能在運行時使用。 – zeroes00 2012-02-13 21:29:15