Я работаю в ad tech, и наша текущая инфраструктура использует MySQL для хранения кликов и журналов конверсий. До сих пор MySQL был полезен для нас, чтобы запускать специальные запросы против данных кликов. Мы рассматриваем возможность перехода на Кассандру, поскольку мы получаем огромные трафик в часы пик. Мало того, мы развиваемся очень быстрыми темпами, и мы получаем около 500-1000 кликов в секунду время от времени (в течение длительного времени, иногда в течение 20-30 минут). Я был доступным вариантом, и до сих пор мое исследование позволило мне поверить, что ничто не сравнится с Cassandra с точки зрения производительности записи. В настоящее время я создаю модель данных для хранения кликов. Основным компонентом кликам являются следующие:Cassandra для хранения журналов кликов
- Идентификатор кампании
- Pub ID
- Отметка
- Творческий идентификатор
- Код события (является ли он действительным щелчок или недействительный клик. Это значение int. Например, event_code = 0 является действительным кликом)
Теперь мне нужно поддержать следующие запросы:
1. SELECT * FROM clicks WHERE campaign_id=?
2. SELECT * FROM clicks WHERE campaign_id=? AND date_time>=? AND date_time <=?
3. SELECT * FROM clicks WHERE campaign_id=? AND pub_id=? AND AND date_time>=? AND date_time <=? AND event_code=?
и т.д. Это достаточно просто сделать с MySQL, после чего я просто получить все данные из этих запросов в файл CSV. Однако, если бы я моделировать свои таблицы на основе первого запроса, то это означало бы, что я хотел бы требовать, чтобы создать таблицу в Кассандре, как следующие:
CREATE TABLE clicks_by_campaign(
camp_id int,
pub_id int,
date_time timestamp,
creative_id int,
event_code int,
//other fields like ip, user agent ,device etc,
PRIMARY KEY(camp_id,pub_id,date_time,event_code,creative_id))
Но существуют кампании, которые могут иметь миллионы строк , Например, у нас есть кампании с определенным id, например id = 3, которые имеют более 7 миллионов кликов. Разве это не создало бы проблему с большими рядами? Насколько я понимаю, все данные этой кампании будут храниться как один раздел на одной физической машине. Я считаю, что это правильно или я что-то упускаю? Обратите внимание, что другие запросы также должны поддерживаться. Например, мне, возможно, придется делиться журналами кликов для определенного издателя (независимо от идентификатора кампании). В этом случае запрос будет выглядеть следующим образом:
SELECT * FROM clicks_by_publisher WHERE pub_id=?
Это, очевидно, означало бы, что я должен был бы создать еще одну таблицу под названием «clicks_by_publisher» и т.д.
Я хотел бы также отметить, что я будет использовать Apache Flink, который будет анализировать, агрегировать и группировать данные кликов в окне времени в 1 минуту. Эти результаты будут также сохранены в MySQL, чтобы обеспечить как можно большую поддержку специальных запросов.
В любом случае, я был бы признателен, если бы кто-то указал мне в правильном направлении. Есть ли другая стратегия, которую я могу использовать? Я что-то упускаю? Спасибо :)
Спасибо за ваш ответ. Не могли бы вы рассказать о том, что вы подразумеваете под «токеном»? Более того, мне кажется, что вы предлагаете разбивать данные кампании по метке времени (так что если мы получим 5 кликов за 1 временную метку, это будет раздел с 5 строками). Это самый лучший способ сделать это, но я не могу представить 60 * 60 * 24 запросов, если я хочу получить сведения о клике для кампании в определенный день. – Ankush92
@ Ankush92 Добавил несколько подробностей для ответа. – Gunwant
Спасибо за объяснение. Я подумаю об этом подробнее. Действительно ценю это ! – Ankush92