在Hbase中,我使用'app_name_ip_timestamp'等行键加载数据。但是会有很多这样的应用程序。所以从本质上讲,我每分钟收集大约5万个数据点。
如果我必须基于ip查询,我可以在行键上使用子字符串过滤器,但这是一个好方法吗? 无论如何,Cassandra可以帮忙吗? 在这种情况下,Cassandra有哪些优势? 如何使HBase适合我可以使用行键subString过滤器并执行范围扫描并以毫秒为单位检索结果的情况? 在adhoc查询和部分行键,范围扫描,聚合结果方面查询cassandra和hbase的主要区别是什么
答案 0 :(得分:1)
我不能谈论Cassandra,所以我只会回答你的问题并考虑HBase ,因为这里已经多次询问过这类问题。你基本上需要HBase不直接支持的二级索引,请阅读以下关于它的文档:http://hbase.apache.org/book/secondary.indexes.html
现在,根据您的访问模式,我建议您手动双写同时写入数据表和作为二级索引的表,使用两种不同类型的rowkeys;
[ip_as_long]-1-[timestamp]-[appname]
[ip_as_long]-2-[appname]-[timestamp]
此表只有一个系列,其中一列包含数据表中数据点的rowkey。有了良好的缓冲,你将不会遇到任何性能损失。
要根据ip查询数据,只需扫描索引表,将起始行设置为“[ip_as_long] -1-”以按时间戳查询,或扫描为“[ip_as_long] -2- [appname]”查询应用名称。该扫描将为您提供可用于对数据表执行多重操作以检索它的行键。
考虑到这种方法,您可以使用另一个辅助索引表,其中appname为主维度,因此您也可以通过“[appname] - [timestamp]”查询数据。
建议:如果你有足够的存储空间,而不是将rowkey写入索引,我只会自己编写整个数据,这样就可以避免执行多重命令。