У меня HBase работает в автономном режиме и столкнулся с некоторыми проблемами при запросе таблиц с использованием Java API.Таблица содержит несколько миллионов записей (но может возрасти до миллиардов), которые имеют следующую метрику ключа строки:
<UUID>-<Tag>-<Timestamp>
Я использую два фильтра операции сравнения для запроса определенного диапазона строк, который представляет временной интервал.
Scan scan = new Scan();
RowFilter upperRowFilter = new RowFilter(CompareOp.LESS,
new BinaryComparator(securityId + eventType + intervalEnd)
.getBytes()));
RowFilter lowerRowFilter = new RowFilter(CompareOp.GREATER_OR_EQUAL,
new BinaryComparator(securityId + eventType + intervalStart)
.getBytes()));
FilterList filterList = new FilterList();
filterList.addFilter(lowerRowFilter);
filterList.addFilter(upperRowFilter);
scan.setFilter(filterList);
scanner = table.getScanner(scan);
result = scanner.next();
Когда я вызываю метод ResultScanner # next (), все работает нормально, пока не дойдет до последней строки диапазона клавиш, который указан через фильтры.Требуется до 40 секунд, пока ResultScanner не вернет последнюю строку, которая лексически меньше верхнего предела диапазона строк.
Когда я меняю порядок фильтров в filterList с
*От 1011 *
до
filterList.addFilter(upperRowFilter);
filterList.addFilter(lowerRowFilter);
сканеру требуется до 40 секунд, пока он не начнет возвращать какие-либо результаты, но больше нет задержки при возврате последней строки, поэтому я решил, что задержка исходит отфильтр CompareOp.LESS.
Единственный известный мне способ обойти эту задержку - это опустить upperRowFilter и вручную проверить, находятся ли ключи строк вне диапазона, но я уверен, что должно быть что-то не так.потому что я ничего не нашел по этой проблеме при поиске в интернете.
Я также уже пытался избавиться от этого с помощью кеширования, но когда я использую размер кеша, который меньше числа возвращаемых строк, это не такизменить что-либо, и если я использую размер кэша больше, чем число возвращаемых строк, задержка все еще там, но снова, прежде чем какие-либо результаты возвращаютсяНед.
У вас есть идеи, что может вызвать такое поведение?Я делаю это неправильно или мне чего-то не хватает?
Заранее спасибо!