2016-04-08 4 views
3

Я делаю POC с Aerospike. Кажется, он соответствует всем моим потребностям, кроме одного. Когда я устанавливаю TTL в записи, он истекает после истечения срока действия TTL, как и ожидалось, но у меня есть требование, когда я хочу, чтобы аэрокосмическая станция уведомила меня, когда выходила запись. Возможно ли это?Aerospike TTL прослушиватель

ответ

4

Вы можете получить запись TTL с UDF и сравнить с текущим временем

Скелет UDF дается здесь:

локальная функция get_metadata (ЗАП) возвращение record.ttl (РЭЦ); конца

https://discuss.aerospike.com/t/how-to-query-the-metadata-such-as-ttl-of-record-from-tools/916

Я подозреваю, что это будет довольно ресурс тяжелой, если вы делаете это для каждой записи периодически, но это возможно, чтобы иметь свой бег приложения, UDF каждый так часто и пинг уведомления, когда запись близко к истечению срока действия.

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

4

Aerospike не сделает это за вас из коробки. Вы можете сделать это, выполнив задание периодического сканирования. В политике проверки вы можете установить includeBinData в false. Это будет очень эффективное сканирование, поскольку оно будет возвращать только метаданные записей. В метаданных вы можете проверить ttl и прочитать полные записи, срок действия которых истекает.

1

Благодарим за интерес к аэрокосмической промышленности. Как вы хотите, чтобы Aerospike уведомил вас?

У нас был этот запрос в течение длительного времени и рассмотрели варианты осуществления. В распределенной системе существует ряд проблем.

Например, мы могли бы записать запись в файл журнала в специальный «файл истечения». Конечно, эти данные могут быть потеряны при сбое сервера, поэтому он не является избыточным.

Другим механизмом является вставка в очередь или выполнение сетевого события (вызов REST). Для этого также требуется распределенный журнал, чтобы уведомления не удалялись (что делает Aerospike с его функцией перекрестного центра обработки данных).

Таким образом, меня интересует вид механизма уведомления, который вы хотели бы.

Метод Бен Бэйтс предлагает использовать функцию сканирования UDF для переноса выдержки в такое сканирование UDF. Затем в UDF вы также можете уведомить об этом. Это должно работать, но вам нужно поместить TTL в корзину и не использовать стандартный механизм TTL. Это, безусловно, будет менее эффективным, чем стандартный механизм TTL в C, но может обеспечить то, что вам нужно.

+0

Звонок REST будет отличным. –

+1

По сравнению с Redis. Вы можете начать redis с уведомлениями о событиях, и вы можете настроить, какие типы событий вы хотите, чтобы ваш сервер Redis мог уведомлять (например, писать, читать, истекать и т. Д.), Поэтому вы можете подписаться на ваш сервер и когда что-то происходит, срабатывает обработчик событий. Что-то вроде этого было бы очень полезно для аэроспей. Я рассматриваю возможность использования аэрокосмического оборудования, но это требование для меня, и я не могу заплатить цену за выполнение запросов каждый раз, чтобы проверить, что скоро истечет, ни разбора журналов. это не хорошо в исполнении, и это любительское решение. –

+0

@CesarVillasana Ну, кто-то должен периодически проверять, истекает ли ключ, и это супер неоптимально, независимо от того, сделано ли это на БД или на стороне клиента.Redis реализует полупассивный способ истечения срока действия ключей, поэтому вы получаете только событие истечения срока действия, когда ключ был удален, а не когда он истек. – spektom

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