У меня есть таблица, которая подвергается интенсивному действию вставки и удаления, и мне нужно часто сканировать ее с помощью сканирования (только по ключу строки, без значений столбца).
Я заметил, что Scan
задержка увеличивается с увеличением объема данных в таблице. После более тщательного изучения ScanMetrics
я заметил, что для большинства сканирований с более высокой задержкой показатель ScanMetrics.countOfRowsFiltered
НАМНОГО больше, чем число строк, которые я на самом деле запрашиваю для сканирования (которое я указываю как .setLimit()
в Scan
и PageFilter()
в FilterList
, который я установил на scan
).
Что именно представляет собой мера countOfRowsFiltered
? В моих средах тестирования я никогда не смогу воспроизвести ситуацию, когда число проверенных строк превышает то, что я установил в качестве предела, и, следовательно, этот countOfRowsFiltered
всегда равен нулю. Но в реальной среде оно часто бывает довольно высоким (и, по моим расчетам, это может быть причиной постепенного увеличения общей задержки сканирования).
Я не могу найти описание этой меры там. Любой опыт с этим, и как его минимизировать?
Я настроил сканирование следующим образом:
Scan scan = new Scan().withStartRow(rowKeyStart).withStopRow(rowKeyStop);
scan.setCaching(scanCache);
FilterList filterList = new FilterList(
FilterList.Operator.MUST_PASS_ALL,
new FirstKeyOnlyFilter(),
new KeyOnlyFilter(),
new PrefixFilter(myPrefix),
new PageFilter(limit));
scan.setFilter(filterList);
scan.setCacheBlocks(false);
scan.setLimit(limit);
scan.setReadType(ReadType.PREAD);
scan.setScanMetricsEnabled(true);
ResultScanner scanner = myTable.getScanner(m_scan);
int processed = 0;
for (Result row : m_scanner.next(limit))
{
// do something with this row
if (++processed >= limit)
break;
}
ScanMetrics sm = m_scanner.getScanMetrics();
long scanned = sm.countOfRowsScanned.get();
long filtered = sm.countOfRowsFiltered.get(); // WHAT IS THIS???
scanner.close();