我有一个要进行大量插入和删除操作的表,我需要使用“扫描”(仅按行键,没有列值)频繁地对其进行扫描。
我注意到Scan
延迟随着表中数据量的增加而增加。仔细检查ScanMetrics
后,我发现对于大多数延迟较高的扫描,ScanMetrics.countOfRowsFiltered
的度量值比我实际请求扫描的行数高很多(我将两者指定为{我设置为.setLimit()
的{{1}}中的{1}}和Scan
中的PageFilter()
。
FilterList
的度量到底代表什么?在我的测试环境中,我永远无法重现所扫描的行数高于我设置的限制的情况,因此,scan
始终为零。但是在实际环境中,它通常很高(根据我的计算,这可能是整体扫描延迟逐渐增加的原因。)
我在那里找不到该措施的任何描述。有任何经验,以及如何将其最小化?
我将扫描设置如下:
countOfRowsFiltered
答案 0 :(得分:1)
我相信我找到了答案:
我仅通过指定Deletes
来执行rowKey
(即使该行中只有一列)。在这种情况下,将删除标记放在行上,并将该行从所有扫描中排除,并获取该行,但是即使在进行重大压缩后,该行仍会物理存在于基础基础结构中。这样,Scan
会花费额外的时间遍历这些已删除的行并过滤掉它们,以准备排除它们的最终结果。
如果Delete
经过RowKey
,ColumnFamily
,ColumnName
,的完全限定,则看起来该行仅会从基础基础结构中删除 TimeStamp
(其所有列)中。
更多信息:仅进行重大压实似乎还不够。首先,需要对表进行整理,然后进行大写压缩,然后删除的行完全消失,Scan
不会花费额外的时间来过滤掉它们。
这比我想的要难...