Как hazelcast выполняет вытеснение записи карты, с точки зрения ее потоковой модели?
Я это понимаю <min-eviction-check-millis>
в конфигурации hazelcast определяет минимальное время в миллисекундах, которое должно пройти перед проверкой, является ли раздел этой карты выполнимым или нет. Таким образом, в течение каждого настроенного интервала выселение будет выполняться на карте в соответствии с настроенной политикой выселения. У меня есть следующие вопросы, связанные с этой областью.
Q1. Работает ли операция вытеснения в потоке операций?
Q2. Сможет ли операция выселения заблокировать весь раздел, на котором она работает?
Q3. Нужно ли ожидать какого-либо снижения производительности, если я буду следовать значению по умолчанию, равному 100 мс (которое я считаю очень малым значением).
Q4. Как часто будет проводиться операция по выселению в следующем сценарии.
<map name="employees">
<in-memory-format>BINARY</in-memory-format>
<backup-count>1</backup-count>
<max-idle-seconds>1800</max-idle-seconds>
<eviction-policy>NONE</eviction-policy>
<time-to-live-seconds>0</time-to-live-seconds>
<min-eviction-check-millis>1000</min-eviction-check-millis>
<max-size>0</max-size>
<eviction-percentage>0</eviction-percentage>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
</map>
Обратите внимание, что, хотя не настроены политика и процент выселения, максимальное время простоя установлено равным 1800 секундам.
Ответы на вышеуказанные вопросы помогут мне принять обоснованное решение о значениях, которые будут использоваться для этих конфигураций в крупномасштабном развертывании.
1 ответ
min-eviction-check-millis - это атрибут политики максимального размера и выселения из-за максимального размера. Если вы установите min-eviction-check-millis=0; тогда поток раздела будет проверять размер при каждом обновлении. Если вы установите min-eviction-check-millis=1000; тогда поток раздела будет проверять размер обновлений, если предыдущая проверка была ранее, чем 1 секунда.
Если вы хотите, чтобы ваша карта строго придерживалась политики максимального размера, установите ее равной 0. Но при каждом обновлении у нее будут накладные расходы при проверке размера.
Q1. Работает ли операция вытеснения в потоке операций?
Работает на разделенных потоках. Потоки разделов выполняют операции на основе разделов (map.put, map.get, map.remove и т. Д.).
Q2. Сможет ли операция выселения заблокировать весь раздел, на котором она работает?
Не явная блокировка. Но пока поток раздела выполняет операцию вытеснения, другие операции в этом разделе будут заблокированы.
Q3. Нужно ли ожидать какого-либо снижения производительности, если я буду следовать значению по умолчанию, равному 100 мс (которое я считаю очень малым значением).
Это проверка размера, но да, это накладные расходы. Если вы терпите, ваша карта превышает максимальный размер; тогда вы можете установить более высокие значения.
Q4. Как часто будет проводиться операция по выселению в следующем сценарии.
Вы не установили eviction-policy в этом конфиге. Так что максимальный размер проверяться не будет. min-eviction-check-millis или max-size здесь не действуют.
max-idle-секунд (также ттл) это отдельная история. Мы называем это истечением. Каждая операция get сначала проверяет, истек ли срок действия записи. Но также периодически; некоторые записи выбираются случайным образом и проверяются, истек ли срок их действия. Истекшие записи удаляются.