Кассандра: посещение последних 10 пользователей - PullRequest
4 голосов
/ 15 февраля 2012

Мы пытаемся отслеживать ссылки, нажимаемые на наших веб-сайтах, путем сохранения идентификатора сеанса и URL-адресов в Кассандре. Мы хотим показать на странице последние 10 посетителей (идентификаторы сеансов) и в хронологическом порядке перечислить их путешествие по нашим страницам.

«Схема» выглядит следующим образом:

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

У нас есть другое семейство столбцов, которое содержит ключ строки "lastseen". Там имя столбца - это временная метка, а значение - идентификатор сессии. Мы сделали это, так как нам нужен хронологический порядок идентификаторов сессий, как они появляются на нашем сайте.

Таким образом, когда пользователь щелкает ссылку, мы сохраняем пары значений метки времени / сеанса в последней видимой строке. И еще одна запись с меткой времени / URL в строке для идентификатора сеанса пользователя.

Идея состоит в том, что мы теперь запрашиваем последние 10 записей в последней видимой строке, а затем ищем URL-адреса, по которым щелкнул этот идентификатор сеанса, в соответствующей строке идентификатора сеанса. Однако у нас есть повторяющиеся значения в последней просмотренной строке, т. Е. Тот же пользователь, который сделал последние 10 кликов, вернет один и тот же идентификатор сеанса 10 раз.

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

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

Есть ли что-то очевидное, чего нам не хватает?

Tom

1 Ответ

3 голосов
/ 17 февраля 2012

Я думаю, что самое простое решение - это то, о чем вы уже подумали: имейте CF с «самым последним действием», чьи имена столбцов - это время активности, а значения - идентификатор сеанса, и сканируйте его в обратном направлении, пока не получите 10. уникальные значения.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...