我对大数据领域很陌生,目前仍然坚持做出基本决定。
对于一个研究项目,我需要每分钟存储数百万个日志条目到我的基于Cassandra的数据中心,这个工作非常好。 (单个数据中心,4个节点)
Log Entry
------------------------------------------------------------------
| Timestamp | IP1 | IP2 ...
------------------------------------------------------------------
| 2015-01-01 01:05:01 | 10.10.10.1 | 192.10.10.1 ...
------------------------------------------------------------------
每个日志条目都有一个特定的时间戳。应该在第一个实例中通过不同的时间范围查询日志条目。按照建议,我开始以大排方式“模拟我的查询”。
Basic C* Schema
------------------------------------------------------------------
| row key | column key a | column key b ...
------------------------------------------------------------------
| 2015-01-01 01:05 | 2015-01-01 01:05:01 | 2015-01-01 01:05:23
------------------------------------------------------------------
其他细节: 列键是时间戳+ uuid的组合,是唯一的并且避免重写; 特定时间的日志条目通过其相同的分区键存储在节点附近;
因此,日志条目以每行的短时间间隔存储。例如2015-01-01 01:05
的每个日志条目,精度为一分钟。查询并非真正作为具有<
运算符的范围查询,而是选择条目作为指定分钟的块。
基于范围的查询在适当的响应时间内成功,这对我来说很好。
问题:
在下一步中,我们希望通过查询获得其他信息,这些信息主要关注IP
字段。例如:选择包含IP1=xx.xx.xx.xx
和IP2=yy.yy.yy.yy
的所有条目。
显然,当前模型对于其他以IP为中心的CQL查询非常不可用。所以问题不在于找到可能的解决方案,而是可能的解决方案的各种可能技术选择:
由于我在这个领域缺乏知识,很难找到我应该采取的最佳方式。特别是感觉使用集群计算框架将是一个过度的解决方案。
答案 0 :(得分:2)
据我所知,您的表架构如下所示:
create table logs (
minute timestamp,
id timeuuid,
ips list<string>,
message text,
primary key (minute,id)
);
使用这个简单的架构,您:
从我的观点来看,有多种方法可以实现这个想法:
对于我来说,做这些事情的C *方法是为不同的查询提供一组单独的表。它将使您能够执行超快速的查询(但存储成本增加)。