Как разработать 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 и выше

Другие вопросы по тегам