用于在 Cassandra 中登录的 DataModel 用例
DataModel use case for logging in Cassandra
我正在尝试在 Cassandra 中设计应用程序日志 table,
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;
现在我关心的是没有做二级索引,有没有一种高效的方法来基于模块查询并获取数据(或)是否有更好的设计?
也让我知道当前设计中的性能问题。
对于基于module
和日期的抓取,你只能使用另一个table,像这样:
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?
我正在尝试在 Cassandra 中设计应用程序日志 table,
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;
现在我关心的是没有做二级索引,有没有一种高效的方法来基于模块查询并获取数据(或)是否有更好的设计?
也让我知道当前设计中的性能问题。
对于基于module
和日期的抓取,你只能使用另一个table,像这样:
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?