2016-12-31 6 views
1

Я немного смущен тем, как работает куча памяти. У меня есть сервер с 32 ГБ оперативной памяти и набор данных для сопоставления значений ключа размером около 1 ТБ. Я ищу простую и быструю встроенную базу данных Java, которая позволила бы мне сопоставить ключ со значением в соответствии с этим набором данных 1 ТБ, который в основном должен быть прочитан с диска. Каждая запись в этом наборе данных мала (< 500 байт), поэтому я думаю, что использование файловой системы было бы неэффективным.Может ли запись хроника-карты обрабатывать данные, большие, чем память?

Я хотел бы использовать Хронику для этого. Я прочитал, что использование памяти кучи может превышать размер ram и что оно каким-то образом взаимодействует с файловым массивом, но в то же время Chronicle Map описывается как база данных в памяти. Может ли хроническая карта обрабатывать набор данных 1 ТБ для моего сервера, или я ограничу только использованием наборов данных 32 ГБ или меньше?

ответ

3

Ответ зависит от вашей операционной системы. В Windows карта хроники должна вписываться в основную память, однако в Linux и MacOSX она не имеет исправления в основной памяти (разница в том, как отображение памяти реализовано в этих ОС). Примечание: Linux даже позволяет отображать область, большую, чем ваше место на диске (MacOSX и Windows)

Итак, на Linux вы можете сопоставить 1 ТБ или даже 100 ТБ на машине с 32 ГБ памяти. Важно помнить, что ваш шаблон доступа и ваш выбор диска будут иметь решающее значение для производительности. Если вы обычно обращаетесь к тем же данным большую часть времени, и у вас есть SSD, это будет хорошо работать. Если у вас есть вращающийся диск и шаблон произвольного доступа, вы будете ограничены скоростью вашего диска.

Примечание: мы проверили карту хроники на 2,5 миллиарда записей, и она хорошо работает, так как использует 64-битное хеширование ключей.

+0

Что возвращает 'ChronicleMap.size()' для карты с 2,5 миллиардами записей? Прерывается ли она при максимальной стоимости int ~ 2,15 миллиарда? –