Как устроить быстрое чтение рандомных участков в файле в 400 гб?

Нужно максимально быстро считывать с файла блоки байт заданного размера.

Я создал файл 400гб и записал в него 4 миллиарда записей по 100 байт.

Дальше пытаюсь рандомно доставать 100 байт из любого места файла.

SSD 400 gb, 56gb ram, linux ubuntu , ext4. Код минимальный на java.
Использовал RandomAccessFile класс. Но для seek он каждый раз делает его не от текущего места а от начала файла.

Результат - 1000 случайных чтений блоков по 100 байт за 7 секунд.

Как можно ускорить случайное чтение?
  • Вопрос задан
  • 1249 просмотров
Решения вопроса 1
@nirvimel
Автор должен был сразу указать, что речь идет не о физическом сервере, а о гипервизоре azure microsoft.
Это объясняет многое... Нет, это объясняет все!
И слово SSD будет лучше убрать, если вы этот "SSD" сами в руках не держали (и никто его в руках не держал, т.к. это просто виртуалка под гипервизором).
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@alexxandr
you'll see in memory only 0xDEADFACE
Сменить язык на C
Ответ написан
@lega
Но для seek он каждый раз делает его не от текущего места а от начала файла

seek просто задает адрес и не делает io операций, поэтому это не влияет.

Скорее всего SSD тормозной, можете проверить его тулзами. Так же когда вы считываете всего 100 байт, с самого девайса считывается минимальный блок (4кб, 16кб, ...)
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
"Я создал файл 400гб и записал в него 4 миллиарда записей по 100 байт. "

Не очень понятна эта фраза. У вас просто бинарный файл, или база данных?
Если просто бинарный файл, то что означает "записал в него 4 млрд записей"?
Ответ написан
Jump
@Jump
Системный администратор со стажем.
Но для seek он каждый раз делает его не от текущего места а от начала файла
Почему вы так решил? На основании какой информации, и почему считаете должно быть по другому?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы