gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:58:31 28 4
gpt4 key购买 nike

我是 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/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com