Система пользовательских баллов в Кассандре
Я хочу разработать систему для пользователя. Основными двумя точками этой системы являются точка и журнал.
Я хочу использовать Кассандру для хранения данных. Две причины:
- Кассандра предоставляет функцию счетчика, которую я могу использовать, чтобы сохранить точку.
- Журнал изменения точки может быть слишком много, я должен думать о масштабе хранилища. Кассандра легко масштабируется.
Основные данные структуры:
// row
name: user_id,
values: {
point: {
name: point,
values: 1000
},
log: {
name: log,
values: {
log_timestamp: {
name: timestamp,
values: xxxx
},
log_timestamp: {
name: timestamp,
values: xxxx
},
log_timestamp: {
name: timestamp,
values: xxxx
},
……
}
}
}
Мой вопрос:
Есть ли проблема, если журнала слишком много?
1 ответ
Решение
@lifei
То, что вы хотите, это как-то таблица с:
- Ключ строки (ключ раздела) = userId
- 1 счетчик очков
- 1 коллекция журналов с как можно большим количеством log_timestamp
Это действительно очень легко создать такую таблицу:
CREATE TABLE logs
(
userId: int,
log_timestamp long, //timestamp
value text,
PRIMARY KEY (userId,log_timestamp)
);
Это кластеризованная сущность (широкая строка) с максимум 2 миллиардами пар log_timestamp/value.
Для счетчика точек, к сожалению, вам нужно создать другое семейство столбцов, чтобы сохранить его, потому что Cassandra не позволяет смешивать значение счетчика с другими типами.