размер сохраняемого файла хроники-карты

Я пытаюсь понять, как рассчитывается размер сохраняемых файлов карт.

При создании постоянной карты на диске с помощью чего-то вроде:

ChronicleMap
   .of(Key.class, Value.class)
   .name("foo")
   .entries(1024)
   .averageKeySize(32)
   .averageValueSize(2048)
   .maxBloatFactor(1)
   .createOrRecoverPersistedTo("foo.dat")

Я предполагаю, что размер предварительно выделенного файла foo.dat является функцией размера ключа/значения, количества записей и maxBloatFactor, а также, возможно, архитектуры ОС и других факторов.

Итак, мой вопрос: учитывая набор значений конфигурации, можно ли детерминистически узнать, каким будет размер файла foo.dat?


person Antonio Barone    schedule 06.10.2020    source источник


Ответы (1)


Вы можете просто вызвать метод VanillaChronicleMap#dataStoreSize(), он вернет размер файла.

Подробнее о том, как это работает, вы можете узнать на его реализация - это открытый исходный код (хотя это не тривиальное вычисление).

person Dmitry Pisklov    schedule 08.10.2020
comment
Спасибо @Dmitry, это полезный метод (я уже использую его при выдаче метрик), но мне было интересно узнать размер до фактического создания файла. например, у меня есть 100 записей, ключ avg — 1 байт, значение avg — 1 байт, maxBloatFactor — 1, следовательно, размер файла будет XXX байт. - person Antonio Barone; 12.10.2020
comment
@AntonioBarone, как я уже сказал, вы можете просто посмотреть на реализацию этого метода. Это не тривиально, поэтому для нас нецелесообразно пытаться описать, как это работает, но в основном это зависит от размера сегмента, размера данных и других вещей, известных заранее, поэтому вы можете просто повторно реализовать тот же метод с требуемыми параметрами. - person Dmitry Pisklov; 13.10.2020