Cassandra 动态列族

2023-12-13

我是 cassandra 的新手,我读了一些关于静态和动态列族的文章。 值得一提的是,Cassandra 3中的表和列族是相同的。

我创建了键空间、一些表并将数据插入到该表中。

CREATE TABLE subscribers(
 id uuid,
 email text,
 first_name text,
 last_name text,
 PRIMARY KEY(id,email)
);

INSERT INTO subscribers(id,email,first_name,last_name) 
    VALUES(now(),'[email protected]','Test1','User1');
INSERT INTO subscribers(id,email,first_name,last_name) 
    VALUES(now(),'[email protected]','Test2','User2');
INSERT INTO subscribers(id,email,first_name,last_name) 
    VALUES(now(),'[email protected]','Test3','User3');

一切似乎都很顺利。

但我需要的是创建一个仅包含数据类型而没有预定义列的动态列族。

使用插入查询,我可以有不同的参数,并且应该插入表。

在文章中提到,对于动态列族,不需要创建模式(预定义列)。 我不确定这在卡桑德拉中是否可能,或者我的理解是错误的。

让我知道这是否可能? 如果可能的话请提供一些例子。

提前致谢。


我认为您提到的文章是在 Cassandra 的最初几年写的,当时它基于 Thrift 协议。 Cassandra 查询语言是多年前引入的,现在是使用 Cassandra 的方式 - Thrift 在 Cassandra 3.x 中已弃用,并在 4.0 中完全删除(尚未发布)。

如果您确实需要完全动态的东西,那么您可以尝试通过使用带有列的表作为从文本到特定类型的映射来模拟这一点,如下所示:

create table abc (
  id int primary key,
  imap map<text,int>,
  tmap map<text,text>,
  ... more types
);

但你需要小心 - 使用集合时存在限制和性能影响,特别是如果你想存储超过数百个元素。

另一种方法是将数据存储为单独的行:

create table xxxx (
  id int,
  col_name text,
  ival int,
  tval text,
  ... more types
  primary key(id, col_name));

然后您可以将各个值作为单独的列插入:

insert into xxxx(id, col_name, ival) values (1, 'col1', 1);
insert into xxxx(id, col_name, tval) values (1, 'col2', 'text');

并将所有列选择为:

select * from xxxx where id = 1;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cassandra 动态列族 的相关文章

随机推荐