hbase行键过滤器,范围扫描和cassandra能力

yx2lnoni  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(387)

在hbase中,我使用“app\u name\u ip\u timestamp”这样的行键加载数据。但这样的应用将会有很多。所以本质上我每分钟收集大约5万个数据点。
如果我必须基于ip进行查询,我可以在行键上使用子字符串过滤器,但这是一个好方法吗?Cassandra能帮上忙吗?在这种情况下,Cassandra有什么优势?如何使hbase适合使用行键子串过滤器并执行范围扫描和以毫秒为单位检索结果的情况?在临时查询和部分行键、范围扫描、聚合结果方面,查询cassandra和hbase的主要区别是什么

3duebb1j

3duebb1j1#

我不能谈论Cassandra,所以我将只回答你的问题与hbase铭记在心,因为这种类型的问题已经被问了多次在这里。您基本上需要一个hbase不直接支持的辅助索引,请阅读以下文档:http://hbase.apache.org/book/secondary.indexes.html
现在,根据您的访问模式,我建议您手动双重写入数据表和作为具有两种不同类型行键的辅助索引的表;

[ip_as_long]-1-[timestamp]-[appname]
[ip_as_long]-2-[appname]-[timestamp]

此表只有一个族,其中一列由数据表中数据点的行键组成。有了一个好的缓冲区,你将不会遇到任何性能上的冲击。
要基于ip查询数据,只需扫描索引表,将起始行设置为“[ip\ as\ U long]-1-”以按时间戳查询,或设置为“[ip\ as\ U long]-2-[appname]”以按应用程序名称查询。该扫描将为您提供行键,您可以使用这些行键对数据表执行multiget以检索它。
考虑到这种方法,您可以有另一个以appname为主维度的二级索引表,这样您也可以通过“[appname]-[timestamp]”查询数据。
建议:如果您有足够的存储空间,我只编写整个数据本身,而不是将rowkey写入索引,这样可以避免执行multiget。

相关问题