2016-01-28 6 views
3

Aerospike невероятно быстро и надежно, но дорого. Стоимость для нас основана на количестве хранимых данных.Aerospike: получить время upsert без явного хранения его для записей с TTL

Мы хотели бы иметь возможность запрашивать записи в зависимости от времени их восстановления. В настоящее время, когда мы добавляем или обновляем запись, мы устанавливаем бит в текущую эпоху и можем запускать запросы сканирования в этом бункере.

Мне пришло в голову, что Aerospike знает, когда истечет срок записи, основанный на том, когда он был взят, и поскольку мы можем запросить значение TTL из метаданных записи с помощью simple UDF, можно было бы установить время восстановления для записи с TTL. Мы эффективно используем пространство для хранения значения, которое уже известно.

Возможно ли получить доступ к созданию записи или истечению срока действия через UDF без явного ее хранения?

ответ

4

На данный момент, Aerospike сохраняет только время пробега вместе с записью (время окончания записи). Так что, к сожалению, время ожидания недоступно. Однако следите за обновлениями, поскольку я слышал, что есть некоторые планы по созданию новых функций, которые могут вам помочь. (Я являюсь частью команды OPS/поддержки Aerospike).

+1

Благодаря @Meher. Если мы знаем время void и TTL, мы должны иметь возможность вывести время ожидания, когда TTL не равен 0 (т. Е. «Навсегда»). Поэтому мне любопытно узнать, можно ли получить доступ к времени пустоты через UDF? void - TTL = upsert; где TTL> 0. –

1

void time: Это отслеживает жизнь ключа в системе. Это время, когда ключ должен истекать и используется подсистемой выселения.

поэтому ttl происходит от времени пустоты.

Как мы получаем ТТЛ от записи, мы можем только вычислить пустое время (теперь + ТТЛ)

Основываясь на том, что у вас есть, я думаю, что вы можете оценить upsert время от ТТЛ, только если добавить такое же количество истечения срока действия всех ваших записей, скажем CONSTANT_EXPIRATION_TIME.

в этом случае

upsert_time = now - (CONSTANT_EXPIRATION_TIME - ttl) 

НТН

+0

Спасибо @AmodPandey. Я ценю ответ. Целью является минимизация объема хранимых данных. Мы могли бы сохранить время восстановления в ящике, но это означает, что мы эффективно сохраняем данные, которые уже существуют в Aerospike (для TTL> 0). Часть, которая отсутствует, - это пустое время для уже существующих записей: Aerospike хранит это, но, просматривая документацию, неясно, как можно получить доступ к этой информации. –

+0

Эй, @AlexWoolford, Aerospike не хранит как пустое время, так и TTL. Он хранит только время пустоты (время окончания записи). Скажем, я добавляю запись и устанавливаю срок действия до 1 часа, и запись была вставлена ​​в 4 часа. Aeropsike будет хранить пустоту как 5PM, и это все. Система выселения при запуске в 5 вечера очищает индекс (для удаления объекта). –

+0

Итак, если вы добавляете одинаковое количество истечения срока действия каждый раз при создании/обновлении объекта (скажем, один час, назовите его CONSTANT_EXPIRATION_TIME). затем upsert_time = Текущее время - (CONSTANT_EXPIRATION_TIME - TTL). TTL получается из записи. HTH –