Cassandra中的用户点系统

时间:2013-09-04 17:29:15

标签: cassandra event-log userpoints

我想为用户点设计一个系统。该系统的主要两点是点和日志。

我想使用Cassandra来存储数据。两个原因:

  1. Cassandra提供了我可用于存储该点的计数器功能。
  2. 点变化的日志可能太多了我不得不考虑存储的规模。 Cassandra可以很容易地缩放。
  3. 基本数据结构:

    // 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 个答案:

答案 0 :(得分:1)

@lifei

你想要的是一个表格:

  1. 行键(分区键)= userId
  2. 1点计数器
  3. 1个日志集合,尽可能多的log_timestamp
  4. 创建这样的表确实非常容易:

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

    它是一个群集实体(宽行),最多有2亿个log_timestamp / value对。

    对于点计数器,不幸的是你必须创建另一个列族来存储它,因为Cassandra不允许将计数器值与其他类型混合。