2016-09-09 3 views
1

Как определить обновление строки в сопроцессоре HBase?Обнаружение обновления сопроцессора HBase

Я пытаюсь понять его в функции postPut() RegionObserver, но он вызывается в каждом запросе на put, даже если значение не изменяется.

Пусть это последовательность операций:

  1. положить 'TESTTABLE', 'row2', 'сравни: f1', 'val1'

  2. положить 'TESTTABLE', 'row2', 'сравни: f1', 'val1'

  3. положить 'TESTTABLE', 'row2', 'сравни: f1', 'значение2'

Итак, я хочу, чтобы определить, когда операция 1 и 3 происходит ИЭ когда строка добавляется для fi Первое время и когда значение изменяется. Нет, когда одно и то же значение снова выдвигается.

Есть ли способ, чтобы внутри функции postPut() я мог получить старое значение ячейки? И сравните его с новым значением.

ответ

1

Я бы сделал это в предварительном порядке и просмотрел запись в области сопроцессора. Если запись новая, она не должна выполнять физический ввод-вывод, так как фильтр цветения будет корректным в 99% случаев.

У нас есть несколько оптимизаций в Splice Machine (Open Source), где мы обращаемся к фильтру цветения напрямую, чтобы обойти синхронизацию при сканировании. Вы можете проверить наш сайт github https://github.com/splicemachine/spliceengine и выполнить поиск этого класса и метода HRegionUtil.keyExists().

Удачи.

+0

Но выполнение этого в prePut() приведет к снижению производительности HBase, поскольку я выполняю тяжелую задачу после обнаружения этих обновлений. – restap