cassandra - 如何理解Cassandra中的 'Flexible schema'?

标签 cassandra

我是 Cassandra 的新手,可以在下面的维基百科中找到。
列族(自 CQL 3 起称为“表”)类似于 RDBMS(关系数据库管理系统)中的表。列族包含行和列。每行都由行键唯一标识。每行有多个列,每列都有一个名称、值和时间戳。与 RDBMS 中的表不同,同一列族中的不同行不必共享同一组列,并且可以随时将一列添加到一行或多行。 [29]
它说'同一列族中的不同行不必共享同一组列',但如何实现呢?我几乎阅读了官方网站上的所有文件。
我可以创建表并插入如下数据。

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');
这很像我在关系数据库中所做的。那么如何创建具有不同列的多行呢?
我还找到了官方文档中提到的“灵活模式”,这里怎么理解?
首先十分感谢。

最佳答案

列族来自Cassandra的原始设计,当时数据模型看起来像Google BigTable或Apache HBase,并且使用Thrift协议(protocol)进行通信。但这需要在应用程序内部定义架构,这使得从许多应用程序访问数据变得更加困难,因为您需要更新所有应用程序内部的架构......CREATE TABLEINSERT是很久以前引入的 Cassandra 查询语言 (CQL) 的一部分,并取代了基于 Thrift 的实现(Cassandra 4.0 完全删除了 Thrift 支持)。在 CQL 中,您需要为表定义架构,您需要在其中提供列名和类型。如果你真的需要动态列,有几种方法(我会链接我已经写过的答案,所以不会重复):

  • 如果您有相同类型的值,您可以使用一列作为属性/列的名称,使用另一列来存储值,例如 described here
  • 如果您有不同类型的值,您还可以使用一列作为属性/列的名称,并为值定义多列 - 每个数据类型一个:int , text , ..., 并且您仅将值插入相应的列中(描述为 here )
  • 您可以使用 map (描述 here)-它类似于第一个或第二个,但主要是为极少数“动态列”设计的,还有其他限制,例如,您需要阅读完整 map 以获取一个值,等)
  • 关于cassandra - 如何理解Cassandra中的 'Flexible schema'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62692765/

    相关文章:

    oracle - RDBMS (Oracle) 中的最终一致性

    hadoop - M/R程序中的映射和归约任务数不变

    nosql - 跟踪用户关系的最佳数据库是什么?

    Cassandra 前缀搜索

    Cassandra 集或复合列

    ant - 无法构建 Cassandra 源

    cassandra - 寻找基本和最新的 Cassandra 教程

    nosql - Cassandra/NoSQL 新手 : the right way to model?

    windows - Cassandra :~.cqlshrc 不起作用

    cassandra - com.datastax.driver.core.exceptions.InvalidQueryException : PRIMARY KEY part sequence found in SET part