Предположим, что у меня есть столбец, который обновляется постепенно, кроме перезаписи (например, побитовый целочисленный флаг или столбец суммы). Например (при условии только 1 версии):
Существующая ячейка: [key: 'k1', f1: sum: 100]
Новая ячейка: [key: 'k1', f1: sum: 200]
Затем я хочу обновить данные ячейки следующим образом: sum = 100 + 200 = 300. Получение окончательной записи:
[key: 'k1', f1: sum: 300]
Здесь я хочу ОБЪЕДИНЯТЬ новую ячейку со старой с тем же ключом. Как я могу этого добиться? Прямая установка просто перезапишет старую ячейку. (Опять же поддерживается только одна версия).
Я придумываю несколько идей, но они не кажутся удовлетворительными:
1> На стороне клиента сначала получите старое значение, затем добавьте сумму к текущему объекту размещения.
2> Используйте сопроцессор. В RegionObserver.prePut я получаю, добавляю и изменяю последний объект put. Это подталкивает вычисления к стороне сервера, но по-прежнему требует дополнительного запроса (get) (что может быть дорогостоящим).
Кроме того, даже вышеперечисленное работает в сценарии запросов в реальном времени, но как насчет слияния данных массовой загрузки?
Я просматривал документы довольно долго, но пока не могу найти ключ к разгадке. Я буду очень признателен, если вы поделитесь некоторыми идеями по этому поводу.
Я использую hbase-1.2.6. Спасибо!