行 20110105-1-15-6666 正确地在 [20110103-1-23-, 20110105-1-23-) 范围内,因为 15 小于 23 并且行的排序是字典顺序的。
您提到“我也正在获取与商店 15 相关的行”,这让我想象行键 ( ________-_-23-
) 中的第三个数字是该行的某种属性。
我建议更改此表的架构以使此“商店编号”成为一列,以便您的键看起来像20110103-1
并且在“商店”列中您拥有这些数字15
或23
其他内容。
这样,在 Scan 中,您可以过滤掉 column store=15 的行。
如果您使用的是 Java API,这将类似于:
SingleColumnValueFilter filter = new SingleColumnValueFilter(
Bytes.toBytes("columnfamily"),
Bytes.toBytes("storenumber"),
CompareFilter.CompareOp.NOT_EQUAL,
Bytes.toBytes(15)
);
filter.setFilterIfMissing(true);
Scan scan = new Scan(
Bytes.toBytes("20110103-1"),
Bytes.toBytes("20110105-1")
);
scan.setFilter(filter);
您可能在行键中存储了太多数据,请尝试在行键中获取其中一些属性并将它们设为列。另外请记住,您还可以使用日期(我想20110105
是日期)作为时间戳(表格的单元格)而不是行键。这取决于您的应用程序。