在Cassandra/宽行中混合列类型

在Cassandra/宽行中混合列类型,cassandra,normalization,cql,cql3,denormalization,Cassandra,Normalization,Cql,Cql3,Denormalization,我正在尝试学习如何在cassandra中实现提要(想想twitter)。我想使用宽行存储用户的所有帖子。 我正在考虑在同一行中添加用户信息或统计信息(帖子数量、上次发布日期、用户名等) 我的问题是:姓名、年龄等“字段名”是否存储在列中?或者那些宽行只存储指定的列名和值?我在浪费磁盘空间吗?我是否在某种程度上影响了性能 谢谢 --表创建 CREATE TABLE user_feed ( owner_id int, name text, age int, posted

我正在尝试学习如何在cassandra中实现提要(想想twitter)。我想使用宽行存储用户的所有帖子。 我正在考虑在同一行中添加用户信息或统计信息(帖子数量、上次发布日期、用户名等)

我的问题是:姓名、年龄等“字段名”是否存储在列中?或者那些宽行只存储指定的列名和值?我在浪费磁盘空间吗?我是否在某种程度上影响了性能

谢谢

--表创建

CREATE TABLE user_feed (
    owner_id int,
    name text,
    age int,
    posted_at timestamp,
    post_text text,
    PRIMARY KEY (owner_id, posted_at)
);
--插入用户

insert into user_feed (owner_id, name, age, posted_at) values (1, 'marc', 36, 0);
--插入用户帖子

insert into user_feed (owner_id, posted_at, post_text) values (1, dateof(now()), 'first post!');
insert into user_feed (owner_id, posted_at, post_text) values (1, dateof(now()), 'hello there');
insert into user_feed (owner_id, posted_at, post_text) values (1, dateof(now()), 'i am kind of happy');
--获得饲料

select * from user_feed where owner_id=1 and posted_at>0;
--结果

--正在获取用户信息-仅在=0处发布用户信息

select * from user_feed where owner_id=1 and posted_at=0;
--结果


让它们静止怎么样

静态列在所有分区键中都是相同的,因为分区键是所有者的id,所以可以避免浪费空间并在任何查询中检索用户信息

CREATE TABLE user_feed (
    owner_id int,
    name text static,
    age int static,
    posted_at timestamp,
    post_text text,
    PRIMARY KEY (owner_id, posted_at)
);
干杯,
卡洛

这看起来是个好主意,我不知道静态列。我有一个在文档中无法解决的问题:静态列在行中只存储一次,还是在每列中重复?谢谢AFAIK每行只写入一次。从文档“静态列是由同一分区的所有行共享的特殊列”-事实上,为了更新静态列,您不必提供键的所有字段,只需提供分区键。这是一个简单易懂的答案,这正是我在谷歌搜索了很多次后想要的!
 owner_id | posted_at                | age  | name | post_text
----------+--------------------------+------+------+--------------------
        1 | 1970-01-01 00:00:00+0000 |   36 | marc |               null
CREATE TABLE user_feed (
    owner_id int,
    name text static,
    age int static,
    posted_at timestamp,
    post_text text,
    PRIMARY KEY (owner_id, posted_at)
);