Как разработать Cassandra Scheme для журнала действий пользователя?
У меня есть такая таблица в 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 секунд, чтобы получить список дней с подсчетом действия "присоединиться" с 5 миллионами строк и индексом по дате и действию.
Итак, я хочу регистрировать действия, используя Cassandra, поэтому, Как я могу разработать схему Cassandra и Как сделать запрос, чтобы получить такой запрос менее чем за 1 секунду.
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
как тип данных и так как id
является timeuuid
.. это будет уникальным
Примечание: GROUP BY поддерживается cassandra 3.10 и выше