【发布时间】:2014-06-14 09:24:27
【问题描述】:
我是 cassandra 的新手,想问一下对于此类任务什么是正确的模型设计模式。 我想对未来可能移除的数据进行建模。
我每天有 100,000,000 条这种结构的记录:
- transaction_id
- transaction_time
- transaction_type
- 用户名
- ...其他一些信息
我需要按用户名获取数据(我有大约 5,000,000 个用户)。 我还需要通过其 ID 查找交易详情。 大约 30 天后,所有数据都将变得无关紧要,因此需要找到一种方法来删除过时的行。
正如我所发现的,TTL-s 过期的列值,而不是行。 到目前为止,我遇到了这个模型,据我所知,它意味着非常宽的行:
CREATE TABLE user_transactions (
transaction_date timestamp, //date part of transactiom
user_name text,
transaction_id text,
transaction_time timestamp, //original transaction time
transaction_type int,
PRIMARY KEY ((transaction_date, user_name), transaction_id)
);
CREATE INDEX idx_user_transactions_uname ON USER_TRANSACTIONS(user_name);
CREATE INDEX idx_user_transactions_tid ON USER_TRANSACTIONS(transaction_id);
但此模型不允许按 transaction_date 删除。 这也构建了具有高基数的索引,这是 cassandra 文档强烈反对的
那么这个任务的正确模型是什么?
编辑:
到目前为止,我提出的丑陋解决方法是为每个日期分区创建一个表。请注意,我将此称为解决方法,而不是解决方案。我还在寻找合适的数据模型
CREATE TABLE user_transactions_YYYYMMDD (
user_name text,
transaction_id text,
transaction_time timestamp,
transaction_type int,
PRIMARY KEY (user_name)
);
YYYYMMDD 是交易的日期部分。我们可以使用 transaction_id 创建类似的表以进行事务查找。可以删除或截断过时的表。
【问题讨论】:
标签: cassandra bigdata data-modeling cql3 cassandra-2.0