У меня есть Linux-бокс с 32 ГБ ОЗУ и набором из 4 SSD в конфигурации рейда 0, максимальная пропускная способность которого составляет около 1 ГБ (случайное чтение 4k), и я пытаюсь определить лучший способ доступа к файлам на них случайным образом и одновременно используя Яву. Два основных способа, которые я видел до сих пор, — это файл с произвольным доступом и сопоставленные буферы прямого байта.
Вот где это становится сложным, хотя. У меня есть собственный кеш памяти для объектов, поэтому любой вызов объектов, хранящихся в файле, должен проходить на диск, а не в выгружаемую память (я отключил пространство подкачки в своем Linux-боксе, чтобы предотвратить это). В то время как отображенные буферы прямой памяти предположительно являются самыми быстрыми, они полагаются на подкачку, что нехорошо, потому что A) я использую всю свободную память для кеша объектов, вместо этого использование сопоставленных байтовых буферов повлекло бы за собой огромные накладные расходы на сериализацию, для чего предназначен кеш объектов предотвратить. (Моя программа уже ограничена ЦП) B) с mappedbytebuffers ОС обрабатывает детали того, когда данные записываются на диск, мне нужно контролировать это самостоятельно, т.е. когда я пишу (байт []), он сразу же отправляется на диск, это предотвращает повреждение данных в случае сбоя питания, поскольку я не использую транзакции ACID.
С другой стороны, мне нужен массовый параллелизм, т.е. Мне нужно одновременно читать и записывать в несколько мест в одном и том же файле (при использовании блокировок смещения/диапазона для предотвращения повреждения данных). Пишет но не уверен как это негативно повлияет на мою пропускную способность.
Наконец, у меня не может быть ситуации, когда я создаю новые объекты byte[] для чтения или записи, это потому, что я выполняю почти 100000 операций чтения/записи в секунду, выделение и сбор мусора всех этих объектов убили бы мою программу, что время чувствительный и уже ограниченный ЦП, повторное использование объектов byte[] нормально.
Пожалуйста, не предлагайте какое-либо программное обеспечение для БД, поскольку я пробовал большинство из них, и они значительно усложняют и нагружают процессор.
У кого-нибудь была такая дилемма?