2016-11-29 3 views
0

Я работаю над большим применением данных в scala.Отличный пользователь в cassandra, как это сделать?

Я использую кафку, искру (с кафкой) и Кассандру в качестве хранилища.

У меня есть приложение вне искры, которое запрашивает Cassandra, чтобы показать результат статистики, такой как количество скачиваний.

У меня проблема с статистикой пользователя.

Мне нужно подсчитать количество уникальных пользователей за период (может быть 1 день, 6 дней 7 дней, один месяц или что-то еще) от publisher_id или publisher_id + app_id или даже для всех publisher_id.

Мне нужно рассчитывать в прямом эфире, потому что я не знаю, что такое период, выбранный пользователем.

Мои исходные данные для пользователя сессии является:

CREATE TABLE tests2.raw_sessions (
date_event timeuuid, 
    year int, 
    month int, 
    day int, 
    hour int, 
    publisher_id uuid, 
    app_id text, 
    user_id text, 
    session_id text, 
    PRIMARY KEY (date_event, year, month, day, hour, publisher_id, app_id, 
    user_id, session_id) 
) WITH CLUSTERING ORDER BY (year DESC, month DESC, day DESC, hour DESC, publisher_id ASC, app_id ASC, user_id ASC, session_id ASC) 

Я создал несколько таблиц и пробовал много вещей в Кассандре. Я попытался использовать отдельное ключевое слово в cassandra, но только с статическим столбцом (но это не статический столбец), и он может быть уникальным ключом раздела в таблице (мне нужно отфильтровать дату, а идентификатор издателя - app_id

Я думал об использовании базы данных Postgres, но с Кафкой потокового это не совсем оптимальный не так ли?

что такое решение, я должен использовать для этого?

+0

Я не совсем понимаю ваш вопрос. Вы хотите запросить Cassandra или Spark? – eliasah

+0

Я хочу запросить Кассандру. И получите список пользователей Uniq за период с фильтром publisher_id. Я не знаю, как это сделать с Cassandra –

ответ

0

с моделированием данных Cassandra, копирование данных очень полезен.Кассандра пишет интенсивный файл данных.При написании очень дешево.В то время моделирования данных, всегда думайте о том, что один запрос.

Uniq users list for a period by publisher_id 

Если вы видите, у вас есть требование трех квестов.

1. Unique users by publisher id for a perieod of day. 
2. Unique users by publisher id for a perieod of month. 
3. Unique users by publisher id for a perieod of year. 

Лучше всего создать три различных таблиц

CREATE TABLE users_by_year(
year int, 
month int, 
day int, 
hour int, 
publisher_id uuid, 
app_id text, 
user_id text, 
session_id text, 
PRIMARY KEY ((year,publisher_id),user_id) 
)WITH CLUSTERING ORDER BY(user_id DESC) 

CREATE TABLE users_by_month(
year int, 
month int, 
day int, 
hour int, 
timestamp int, 
publisher_id uuid, 
app_id text, 
user_id text, 
session_id text, 
PRIMARY KEY ((month ,publisher_id),user_id) 
)WITH CLUSTERING ORDER BY(user_id DESC); 

CREATE TABLE users_by_day(
year int, 
month int, 
day int, 
hour int, 
timestamp int, 
publisher_id uuid, 
app_id text, 
user_id text, 
session_id text, 
PRIMARY KEY ((day,publisher_id),user_id) 
)WITH CLUSTERING ORDER BY(user_id DESC); 

Thease модель сохранит уникальные использует для идентификатор издателя за год, месяц, день.

Uniq users filetr by publisher_id 

CREATE TABLE users_by_publisherid(
year int, 
month int, 
day int, 
hour int, 
timestamp int, 
publisher_id uuid, 
app_id text, 
user_id text, 
session_id text, 
PRIMARY KEY (publisher_id,user_id) 
)WITH CLUSTERING ORDER BY(user_id DESC); 

В этой таблице будут сохранены уникальные пользователи для publisher_id.

+1

Спасибо за ваш ответ Gunwant. Но я думаю, что это неверно, для user_by_day, Если на 1-м января придет пользователь, строка будет записана, тогда если на 1 февраля тот же самый пользователь снова зайдет, он перепишет строку isn Не так ли? –

0

Требования, которые должны иметь абсолютно точные данные по подсчетам. Если не использовать структуру данных оценки, такую ​​как HyperLogLog, она может очень помочь.

Смежные вопросы