кеширование datomic и промах кеша

В datomic, если я ищу ключ, который НЕ присутствует в БД, я предполагаю, что это всегда приведет к промаху кеша (даже если вся БД кэшируется в памяти однорангового узла). Поэтому я предполагаю, что такие запросы (поиск НЕСУЩЕСТВУЮЩЕГО ключа) всегда будут попадать в серверную БД (доступ к сети) и не возвращать результата. Это правильно?


person sunillp    schedule 05.11.2016    source источник


Ответы (1)


Основываясь на моем понимании внутренностей Datomic, обращение к хранилищу, когда элемент не найден, не должно быть необходимым.

Покрывающие индексы Datomic реализованы в виде отсортированных наборов, и механизм запросов просматривает их с помощью двоичного поиска. И бинарный поиск - это O (log n) как в среднем, так и в худшем случае, поэтому вы не получите больших ударов по производительности при поиске элементов, которых нет в БД.

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

person August Lilleaas    schedule 07.11.2016
comment
Что, если БД огромна, скажем, 10 ТБ, а доступный кеш на узле составляет всего 100 ГБ, и в этом случае вся БД не поместится в кеш? Попытка загрузить недостающие данные приведет к эвакуации старых данных? - person sunillp; 08.11.2016
comment
Да, есть LRU-кэш, который пытается сохранить рабочий набор на узле, но он будет менять местами по мере необходимости. Тем не менее, количество подкачки вещей на самом деле не сильно меняется в зависимости от того, ищете ли вы существующие вещи или вещи, которые не существуют, это просто общая проблема рабочего набора, которая применима к любой базе данных, которая не может хранить его рабочий набор в памяти. - person August Lilleaas; 10.11.2016