Моя модель данных очень проста. Моделирует посещения веб-страниц.
Так выглядит моя модель посещений (синтаксис схема экспресс-кассандры синтаксис):
fields: {
id: {
type: 'uuid',
rule: {
required: true,
message: 'id is required'
}
},
userId: {
type: 'int',
rule: {
required: true,
message: 'userId is required'
}
},
dateOfVisit: {
type: 'timestamp',
rule: {
required: true,
message: 'dateOfVisit is required'
}
},
urlPort: 'int',
urlHost: {
type: 'text',
rule: {
required: true,
message: 'urlHost is required'
}
},
urlPath: 'text',
urlQuery: 'text',
urlProtocol: {
type: 'text',
rule: {
required: true,
message: 'urlProtocol is required'
}
},
urlHash: 'text',
pageTitle: 'text'
},
key: [['id'], 'dateOfVisit'],
clustering_order: {'dateOfVisit': 'desc'}
У меня есть несколько вопросов об этой модели:
Вопрос № 1:
Я почти уверен, что хочу сохранить части URL-адреса вместо того, чтобы хранить весь URL-адрес в виде одной строки, поскольку это позволяет мне легче выполнять запросы на посещения определенного домена, посещения определенного пути в пределах домен, посещения защищенных страниц и посещения незащищенных страниц, ссылки с защищенных страниц на незащищенные (или обратные) и т. д.
Но, было бы лучше сохранить части URL как A) отдельные столбцы или B) как один столбец Map .
Кроме того, мне нужно будет создавать дополнительные таблицы с разными первичными ключами, просто чтобы поддерживать все различные запросы от запросов к различным частям URL?
Вопрос № 2
У меня будет несколько разных способов запросить данные.
- Получить все посещения всех пользователей
- Получить все посещения для одного пользователя
- Получите все посещения в данный день или сгруппированы по часам в течение данного дня
- Получить все посещения данного домена
- Подсчет всех посещений данного домена, сгруппированных по пути
Итак, учитывая различные типы запросов, как хранить эту модель?
В настоящее время у меня в основном одни и те же поля, хранящиеся в нескольких таблицах только с разными первичными ключами (одна таблица с просто (id) для поддержки «всех посещений всех пользователей», другая таблица с (id, userId) для поддержки » получить все посещения для определенного пользователя "и т. д.
Такое ощущение, что создается несколько копий данных только для поддержки по существу одного и того же запроса, но с одним дополнительным условием к предложению where.
Есть ли лучший способ смоделировать это?