2016-03-25 4 views
3

Мы хотели использовать Aerospike в качестве кеша для дедупликации идентификаторов событий с предопределенным TTL.Aerospike как кеш дедупликации

Наш прецедент очень прост: для каждого получаемого события мы хотим проверить, существует ли этот идентификатор события в кеше или нет. Если это так, мы хотели бы сбросить TTL (коснитесь записи) и пометить это событие как мошенничество в нашем приложении, иначе мы хотели бы сделать операцию put, чтобы вставить этот идентификатор.

Что мы планируем сделать следующее:

(я) Настройка одного записи имен, так как единственное, что мы хотим сохранить это идентификатор. Мы будем использовать идентификаторы событий в качестве ключей и хранить NullValue в качестве соответствующего значения. (Так как нам действительно не нужно ничего, кроме ключевого значения).

(ii) Для проверки деблокировки мы сначала проверим client.exists(), а затем выполним операцию put с помощью RecordExistsAction.REPLACE в политике записи (поскольку это оптимизировано для производительности). Обе эти операции будут вызваны в блоке operation() для атомарности.

Но у нас было несколько запросов относительно следующих:

(а) в отношении срабатывания блока, эта проверка и установить транзакции, что мы хотим сделать, кажется, очень распространенный случай использования. Есть ли API, который обеспечивает это более чистым способом? (Мы ничего не смогли найти)

(ii) Необходимо ли иметь хотя бы один ящик? Мы хотим сохранить ключи и не будем иметь соответствующего значения. Я понимаю, что ключевое значение никогда не хранится, и Aerospike сохраняет только дайджест, но поскольку exists() - единственное, о чем мы заботимся, есть ли способ избавиться от лишних лишних расходов на хранение в буфере?

Спасибо!

ответ

3

(ii) Необходимо ли иметь хотя бы один ящик? Мы хотим сохранить ключи и не будем иметь соответствующего значения. Я понимаю, что ключевое значение никогда не хранится, и Aerospike сохраняет только дайджест, но поскольку exists() - единственное, о чем мы заботимся, есть ли способ избавиться от лишних лишних расходов на хранение в буфере?

Вы ищете data-in-index. Вы должны будете иметь значение, никакие значения не удалят запись. При использовании данных в индексе значение должно быть не более 8 байтов (часто используются целые числа).

Поскольку для использования данных в индексе требуется одиночный бит, большая часть служебных данных корзины устранена.

Смежные вопросы