Обновление метки времени строки, если она существует в HBase

Вкратце: можно ли обновить метку времени строки, если она существует?

Можно ли заставить HBase работать в режиме LRU? Я имею в виду, что если строка существует в HBase, я хочу обновить ее временную метку.

Я знаю, что могу вызвать данные создания, если они не существуют (например, this), но я ищу обратное, обновляя данные (в частности, метку времени), если данные существуют

Причина, по которой я хочу это сделать, заключается в том, что я работаю над компонентом, который использует HBase в качестве кеша для URL-адресов и их содержимого, таким образом, когда поступает новый запрос на URL-адрес, я хочу проверить, существует ли уже контент и существует ли он. хочу ли я обновить его временную метку, иначе контента не существует, и я хочу пойти и получить его. Причина, по которой мне нужна временная метка, связана с другой стороной этой программы, где у меня есть компонент, который считывает все URL-адреса, полученные за последний день, поэтому мне также нужно обновить эту временную метку.

заранее спасибо


person Gideon    schedule 25.02.2016    source источник
comment
Похоже на случай checkAndMutate. Он должен быть доступен в hbase 0.98.7+   -  person Shyam    schedule 26.02.2016
comment
@Shyam есть ли способ обновить временную метку, не используя сначала get для получения значений, а затем используя другой put?   -  person Gideon    schedule 28.02.2016
comment
Также checkAndMutate проверяет определенное значение в строке, а я просто хочу знать, существует ли строка или нет.   -  person Gideon    schedule 28.02.2016
comment
Цитата из javadoc Если переданное значение равно null, проверяется отсутствие столбца (т.е. несуществующее) . Не могли бы вы положиться на противоположное условие этого. то есть передать какое-то фиктивное/сторожевое условие и значение методу checkAndMutate, чтобы оно было истинным, если столбец существует. (Проверка существования не так прямолинейна). * РЕДАКТИРОВАТЬ: * Правильно ли я понял дело, if(exists) "update ts" else "do something else and then update row"?   -  person Shyam    schedule 29.02.2016
comment
Проблема в том, что если строка существует, у меня нет возможности узнать, что будет содержать ее значение, поэтому отрицание условия невозможно - я, вероятно, могу добавить фиктивное значение, которое я могу проверить, но мне не хочется добавлять дополнительную информацию к моим данным. Вы почти правильно поняли if (exists) "update ts" else "do a lot of other things that will eventually create the row" - я как бы пытаюсь использовать его как кэш LRU (с отметкой времени). Должен ли я отредактировать свой вопрос, если он недостаточно ясен?   -  person Gideon    schedule 29.02.2016
comment
Думаю, я понял. Я согласен, что использование checkAndMutate в этом случае будет злоупотреблением API. (Есть обсуждение его поведения здесь). Было предложение улучшить API AtomicOps, но оно так и не было реализовано. Я думаю, что пока лучше остановиться на if(table.exists(Get)) { new Put; }.   -  person Shyam    schedule 02.03.2016
comment
Спасибо за информацию. Я пошел за таблицей и поставил :). Мне просто интересно, есть ли в API что-то большее, чем то, с чем я знаком.   -  person Gideon    schedule 02.03.2016


Ответы (1)


Прошло так много времени с тех пор, как я опубликовал этот вопрос, но я решил, что по крайней мере приму то, что в итоге использовал (хотя это было не то, что я надеялся использовать)

В итоге я просто отправил get, а затем поместил, чтобы метка времени автоматически увеличивалась

person Gideon    schedule 13.12.2016