Hadoop Hbase行键过滤器、范围扫描和卡桑德拉功能

Hadoop Hbase行键过滤器、范围扫描和卡桑德拉功能,hadoop,nosql,cassandra,hbase,Hadoop,Nosql,Cassandra,Hbase,在Hbase中,我使用“app\u name\u ip\u timestamp”等行键加载数据。但这类应用将有很多。所以本质上我每分钟收集大约50k个数据点 若我必须基于ip进行查询,我可以在行键上使用子字符串过滤器,但这是一个好方法吗? 卡桑德拉能帮上忙吗? 在这种情况下,卡桑德拉的优势是什么? 如何使HBase适合使用行键子字符串筛选器并在毫秒内执行范围扫描和检索结果的情况? 在特殊查询和部分行键、范围扫描、聚合结果方面,查询cassandra和hbase的主要区别是什么?我不能谈论cass

在Hbase中,我使用“app\u name\u ip\u timestamp”等行键加载数据。但这类应用将有很多。所以本质上我每分钟收集大约50k个数据点

若我必须基于ip进行查询,我可以在行键上使用子字符串过滤器,但这是一个好方法吗? 卡桑德拉能帮上忙吗? 在这种情况下,卡桑德拉的优势是什么? 如何使HBase适合使用行键子字符串筛选器并在毫秒内执行范围扫描和检索结果的情况?
在特殊查询和部分行键、范围扫描、聚合结果方面,查询cassandra和hbase的主要区别是什么?我不能谈论cassandra,所以我只回答你的问题,记住hbase,因为这类问题在这里已经被问过多次了。您基本上需要一个HBase不直接支持的辅助索引,请阅读以下文档:

现在,根据您的访问模式,我建议您手动双重写入数据表和作为具有2种不同类型的行键的辅助索引的表

[ip_as_long]-1-[timestamp]-[appname]
[ip_as_long]-2-[appname]-[timestamp]
此表只有一个族,其中一列由数据表中数据点的行键组成。有了一个好的缓冲区,你就不会受到任何性能的影响

要基于ip查询数据,只需扫描索引表,将起始行设置为“[ip\u as\u long]-1-”以按时间戳查询,或设置为“[ip\u as\u long]-2-[appname]”以按应用程序名称查询。该扫描将为您提供行键,您可以使用这些行键对数据表执行多重访问以检索数据表

考虑到这种方法,您可以有另一个以appname作为主维度的二级索引表,这样您也可以通过“[appname]-[timestamp]”查询数据


建议:如果您有足够的存储空间,我只写整个数据本身,而不是将rowkey写入索引,这样可以避免执行多重获取。

如果我维护两个表,其中相同行键的不同形式映射到一个uid,另一个表中的uid\U时间戳存储键值对,那么我的性能如何?如果执行返回几行的查询(因为从索引中读取数据后需要额外的multiget),那将非常好。将数据表的行键存储在索引表中,对其进行大扫描时效果不佳。如果您需要对索引表进行大型扫描,请遵循我提到的建议,这会更快:将所有数据存储在索引表中,而不是存储行键,这样会有数据重复(在两个表中存储相同的列),但您不必担心,这是使用HBase时的常见方法。