Система пользовательских баллов в Кассандре

Я хочу разработать систему для пользователя. Основными двумя точками этой системы являются точка и журнал.

Я хочу использовать Кассандру для хранения данных. Две причины:

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

Основные данные структуры:

// 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

То, что вы хотите, это как-то таблица с:

  1. Ключ строки (ключ раздела) = userId
  2. 1 счетчик очков
  3. 1 коллекция журналов с как можно большим количеством log_timestamp

Это действительно очень легко создать такую ​​таблицу:

CREATE TABLE logs
(
  userId: int,
  log_timestamp long, //timestamp
  value text,
  PRIMARY KEY (userId,log_timestamp)
);

Это кластеризованная сущность (широкая строка) с максимум 2 миллиардами пар log_timestamp/value.

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

Другие вопросы по тегам