У меня умеренно большой набор данных, около 800 МБ или около того, это в основном какая-то большая предварительно вычисленная таблица, которая мне нужна для ускорения вычислений на несколько порядков (создание этого файла заняло несколько компьютеров-многоядерных компьютеров, чтобы произвести используя оптимизированный и многопоточный алгоритм ... мне действительно нужен этот файл).
Теперь, когда он был вычислен один раз, 800 МБ данных доступны только для чтения.
Я не могу удержать его в памяти.
На данный момент это один большой огромный файл размером 800 МБ, но разбиение на более мелкие файлы не проблема, если это может помочь.
Мне нужно прочитать около 32 бит данных тут и там в этом файле много времени. Я не знаю заранее, где мне нужно будет читать эти данные: чтения распределяются равномерно.
Какой самый быстрый способ в Java сделать мои случайные чтения в таком файле или файлах? В идеале я должен делать эти чтения из нескольких не связанных потоков (но я мог бы поставить в очередь чтения в один поток, если это необходимо).
Является ли Java NIO подходящим вариантом?
Я не знаком с «файлом сопоставленной памяти»: думаю, я не хочу отображать 800 МБ в памяти.
Все, что мне нужно, - это самое быстрое случайное чтение, которое я могу получить для доступа к этим 800 МБ дисковых данных.
кстати, если люди задаются вопросом, это совсем не то же самое, что вопрос, который я задал недавно:
Java: быстрый дисковый хэш-набор