Мне интересно, какова наилучшая стратегия для управления истечением срока действия данных, связанных с сеансом, хранящихся в типе корзины памяти Riak.
Кажется, этот сервер поддерживает ttl (http://docs.basho.com/riak/kv/2.2.3/setup/planning/backend/memory/#ttl и http://docs.basho.com/riak/kv/2.2.3/configuring/backend/#memory-backend), однако в документации по второй ссылке указано, что:
«Как только время этого объекта истечет, он будет удален при следующем чтении его ключа». Что, если объект больше никогда не будет прочитан? Останется ли он в памяти? Однако я думаю, что в конечном итоге он будет уничтожен при достижении предела
memory_backend.max_memory_per_vnode
.
Является ли сохранение метки времени истечения срока действия еще одним подходящим вариантом? В этом случае обрезка будет выполняться процессом, периодически ищущим «старые» временные метки:
:riakc_pb_socket.search(pid, "expirable_token", "exp_counter:[* TO 1542468475]")
# then we delete them
Я проверил это, сохранив отметку времени в счетчике, поскольку регистры запроса диапазона, которые индексируются как строки, невозможны:
iex(34)> :riakc_counter.increment(System.system_time(:second), :riakc_counter.new())
{:counter, 0, 1542468373}
Однако я не уверен, что счетчики предназначены для хранения целых чисел. Как лучше хранить целые числа в типах данных Riak? Пользовательская схема с объявленным правильным типом int?