Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra 如何理解';灵活的模式&x27;在卡桑德拉?;_Cassandra - Fatal编程技术网

Cassandra 如何理解';灵活的模式&x27;在卡桑德拉?;

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

我是卡桑德拉的新手,在下面的维基百科中可以找到

列族(自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');
这与我在关系数据库中所做的非常相似。那么,如何创建具有不同列的多行呢

我还发现官方文件中提到了“灵活模式”,在这里如何理解


非常感谢。

Column系列源自Cassandra的原始设计,当时的数据模型类似于Google BigTable或Apache HBase,并且使用Thrift协议进行通信。但这需要在应用程序内部定义模式,这使得从许多应用程序访问数据的问题更加严重,因为您需要更新所有应用程序内部的模式

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

  • 如果具有相同类型的值,则可以使用一列作为属性/列的名称,使用另一列存储值,如
  • 如果您有不同类型的值,还可以使用一列作为属性/列的名称,并为值定义多个列-每个数据类型一列:
    int
    text
    ,…,并且您只能将值插入相应的列中(已描述)
  • 您可以使用映射(如上所述)-它类似于第一个或第二个,但主要是为非常少的“动态列”而设计的,此外还有其他限制,例如,您需要阅读完整的映射才能获取一个值,等等。)

  • 谢谢,但我仍然不知道我是否用不同的列实现了不同的行?Cassandra要求在插入期间只指定主键-所有其他列都是可选的-如果不指定值,您将返回
    null
    。所以您只需执行,
    插入到表(pk1,pk2,col1)中的值(1,2,3)
    然后
    插入到表(pk1,pk2,col3)中的值(2,3,5)
    ,您将得到两行-首先,您在
    col1
    中只有值,第二行-只有
    col2