модель данных Кассандра для веб-журнала - PullRequest
2 голосов
/ 02 октября 2011

Играю с Кассандрой, и я пытаюсь оценить, какая модель данных будет лучшей для хранения таких вещей, как просмотры или совпадения для уникальных идентификаторов страниц?Будет ли лучше иметь одно семейство столбцов для каждой страницы или 1 суперколонку (журналы) со столбцами страницы?Каждая страница имеет уникальный идентификатор, а затем вы хотите сохранить дату и некоторые другие метрики в представлении.

Я просто не уверен, какое решение обеспечивает лучшую масштабируемость, большое количество семейств столбцов ИЛИ 1 гигантский суперколонка?

page-92838 {дата: 2 сентября, браузер: IE} page-22939 {дата: 2 сентября, браузер: IE5}

ИЛИ

logs {page-92838 {дата: 2 сентября, браузер: IE} page-22939 {дата: 2 сентября, браузер: IE5}}

И, во-вторых, как обрабатывать множество различных дат: записи для страницы 92838?

Ответы [ 2 ]

2 голосов
/ 03 октября 2011

Вам не нужно семейство столбцов для каждого pageid.

Одним из решений является создание строки для каждой страницы, введенной с помощью pageid.

Затем вы можете иметь столбец для каждого просмотра страницы или нажатия, сортировать по ключу и сортировать по time-UUID (при условии, что было бы полезно иметь представления в отсортированном по времени порядке) или другой уникальный, постоянно увеличивающийся счетчик.Обратите внимание, что все столбцы Cassandra в любом случае имеют временную метку, поэтому у вас будет точная временная метка «бесплатно» независимо от того, какие другие метки времени или даты вы используете.Использование точного идентификатора времени UUID в качестве ключа также решает проблему сохранения большого количества обращений в одну и ту же дату.

Тогда значение каждого столбца может быть текстовым значением или документом JSON, содержащим любые другие метаданные, которые вы хотите сохранить(например, браузер).

page-12345 -> {timeuuid1:metadata1}{timeuuid2:metadata2}{timeuuid3:metadata3}...
page-12346 -> ...
1 голос
/ 03 октября 2011

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

Предполагая, что вы хотите запросить совпадения на странице и обращения в браузере, вы можете иметь столбец счетчика для каждой страницы, например,

stats { #cf 
    page-id { #key
        hits : # counter column for hits
        browser-ie : #counts of views with ie
        browser-firefox : ....
    }
}

Если вам нужно выполнить запросы на основе времени, посмотрите, как твиттеры rainbird денормализует при записи в cassandra.

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