我正在尝试在Cassandra中设计应用程序日志表,
CREATE TABLE log(
yyyymmdd varchar,
created timeuuid,
logMessage text,
module text,
PRIMARY KEY(yyyymmdd, created)
);
现在,当我尝试执行以下查询时,它正在按预期工作,
select * from log where yymmdd = '20182302' LIMIT 50;
以上查询没有分组,有点全局。
目前我为'module'做了一个二级索引,所以我能够执行以下操作,
select * from log where yymmdd = '20182302' WHERE module LIKE 'test' LIMIT 50;
现在我关注的是没有做 二级索引 ,是否有一种基于模块查询的有效方法并获取数据(或)是否有更好的设计?
另请告诉我当前设计中的性能问题。
谢谢,
哈利
答案 0 :(得分:2)
对于基于module
和日期的提取,您只能使用另一个表格,如下所示:
CREATE TABLE module_log(
yyyymmdd varchar,
created timeuuid,
logMessage text,
module text,
PRIMARY KEY((module,yyyymmdd), created)
);
这将允许module
&的每个组合都有单个分区。 yyyymmdd
值,因此您不会有非常宽的分区。
此外,考虑到如果您仅在module
字段上创建了二级索引 - 您可能会遇到分区太大的问题(我假设您的module
值非常有限?)
P.S。你使用的是纯粹的Cassandra,还是DSE?