Использование ChronicleMap в качестве базы данных ключ-значение
Я хотел бы использовать ChronicleMap в качестве базы данных ключ-значение с отображением в памяти (String
в byte[]
). Должно быть в состоянии удерживать порядка 100 миллионов записей. Чтение / получение будет происходить гораздо чаще, чем запись / ввод, с ожидаемой скоростью записи менее 10 записей в секунду. Хотя длина ключей будет одинаковой, длина значения может сильно различаться: от нескольких байтов до десятков Мбит. Тем не менее, большинство значений будет иметь длину от 500 до 1000 байтов.
Прочитав немного о ChronicleMap, я поражен его возможностями и удивляюсь, почему я не могу найти статьи, описывающие его использование в качестве общей базы данных значений ключей. Мне кажется, есть много преимуществ использования ChronicleMap для таких целей. Что мне здесь не хватает?
Каковы недостатки использования ChronicleMap для заданных граничных условий?
1 ответ
Я проголосовал за закрытие этого вопроса, потому что любые "недостатки" были бы относительными.
Как структура данных, Chronicle Map не сортируется, поэтому она не подходит, когда вам нужно перебрать пары ключ-значение в отсортированном порядке по ключу.
Ограничением текущей реализации является то, что вам нужно заранее указать количество элементов, которые будут сохранены на карте, и, если фактическое число не близко к указанному, вы собираетесь чрезмерно использовать память и диск (хотя и не очень строго, в системах Linux), но если фактическое количество записей превышает указанное число примерно на 20% или более, производительность операций начинает снижаться, а снижение производительности линейно возрастает с увеличением количества записей. См. https://github.com/OpenHFT/Chronicle-Map/issues/105