gpt4 book ai didi

mysql - 如何设计用户操作日志的Cassandra方案?

转载 作者:行者123 更新时间:2023-11-29 10:44:40 27 4
gpt4 key购买 nike

我在 MYSQL 中有一个这样的表来记录用户操作:

CREATE TABLE `actions` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`module` VARCHAR(32) NOT NULL,
`controller` VARCHAR(64) NOT NULL,
`action` VARCHAR(64) NOT NULL,
`date` Timestamp NOT NULL,
`userid` BIGINT(20) NOT NULL,
`ip` VARCHAR(32) NOT NULL,
`duration` DOUBLE NOT NULL,
PRIMARY KEY (`id`),
)
COLLATE='utf8mb4_general_ci'
ENGINE=MyISAM
AUTO_INCREMENT=1

我有一个像这样的 MYSQL 查询来找出每天特定操作的数量:

SELECT COUNT(*) FROM actions WHERE actions.action = "join" AND 
YEAR(date)=2017 AND MONTH(date)=06 GROUP BY YEAR(date), MONTH(date),
DAY(date)

这对我来说需要 50 - 60 秒才能获得包含“加入”操作计数的天数列表,其中只有 500 万行以及日期和操作中的索引。

所以,我想使用 Cassandra 记录操作,那么如何设计 Cassandra 方案以及如何查询以在 1 秒内获得此类请求。

最佳答案

CREATE TABLE actions (
id timeuuid,
module varchar,
controller varchar,
action varchar,
date_time timestamp,
userid bigint,
ip varchar,
duration double,
year int,
month int,
dt date,
PRIMARY KEY ((action,year,month),dt,id)
);

说明:与abobe表定义

SELECT COUNT(*) FROM actions WHERE actions.action = "join"AND yaer=2017 AND Month=06 GROUP BY action,year,month,dt

将命中单个分区。在 dt 列中,只有日期...也许您可以将其更改为仅以 int 作为数据类型的日期数字,因为 idtimeuuid..它将是唯一的。

注意: cassandra 3.10 及以上版本支持 GROUP BY

关于mysql - 如何设计用户操作日志的Cassandra方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44846569/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com