如何理解Cassandra中的"灵活模式"?



我是Cassandra的新手,在下面的维基百科中找到。

列系列(自 CQL 3 以来称为"表"(类似于 RDBMS(关系数据库管理系统(中的表。列系列包含行和列。每一行都由行键唯一标识。每行有多列,每列都有名称、值和时间戳。与 RDBMS 中的表不同,同一列系列中的不同行不必共享同一组列,并且可以随时将一列添加到一行或多行中。[注二九]

它说"同一列系列中的不同行不必共享同一组列",但如何实现呢?我几乎阅读了官方网站上的所有文件。

我可以创建表格并插入数据,如下所示。

CREATE TABLE Emp_record(E_id int PRIMARY KEY,E_score int,E_name text,E_city text);
INSERT INTO Emp_record(E_id, E_score, E_name, E_city) values (101, 85, 'ashish', 'Noida');
INSERT INTO Emp_record(E_id, E_score, E_name, E_city) values (102, 90, 'ankur', 'meerut');

这很像我在关系数据库中所做的那样。那么如何创建具有不同列的乘法行呢?

我还发现官方文件提到了"灵活的模式",这里如何理解?

提前非常感谢。

Column 系列来自 Cassandra 的原始设计,当时的数据模型看起来像 Google BigTable 或 Apache HBase,并且使用 Thrift 协议进行通信。但这需要在应用程序内部定义架构,这使得访问来自许多应用程序的数据更加困难,因为您需要更新所有应用程序中的架构......

CREATE TABLEINSERT是很久以前引入的Cassandra查询语言(CQL(的一部分,并取代了基于Thrift的实现(Cassandra 4.0完全删除了Thrift支持(。在CQL中,您需要为表定义架构,其中需要提供列名和类型。 如果你真的需要动态列,有几种方法(我将链接我已经写过的答案,所以不会重复(:

  1. 如果您有相同类型的值,则可以使用一列作为属性/列的名称,并使用另一列来存储值,如此处所述
  2. 如果您有不同类型的值,您还可以使用一列作为属性/列的名称,并为值定义多列 - 每种数据类型一列:inttext、...,并且仅将值插入到相应的列中(在此处描述(
  3. 您可以使用 maps(在此处描述( - 它类似于第一个或第二个,但主要是为非常少量的"动态列"设计的,并且还有其他限制,例如,您需要阅读完整的映射才能获取一个值等。

最新更新