Cassandra 理解卡桑德拉数据模型
我最近通过这篇文章开始学习No-SQL和Cassandra。作者通过此图解释了数据模型: 作者还提供了以下列族示例:Cassandra 理解卡桑德拉数据模型,cassandra,Cassandra,我最近通过这篇文章开始学习No-SQL和Cassandra。作者通过此图解释了数据模型: 作者还提供了以下列族示例: Book { key: 9352130677{ name: “Hadoop The Definitive Guide”, author:” Tom White”, publisher:”Oreilly”, priceInr;650, category: “hadoop”, edition:4}, key: 8177228137{ name”” Hadoop in Act
Book {
key: 9352130677{ name: “Hadoop The Definitive Guide”, author:” Tom White”, publisher:”Oreilly”, priceInr;650, category: “hadoop”, edition:4},
key: 8177228137{ name”” Hadoop in Action”, author: “Chuck Lam”, publisher:”manning”, priceInr;590, category: “hadoop”},
key: 8177228137{ name:” Cassandra: The Definitive Guide”, author: “Eben Hewitt”, publisher:” Oreilly”, priceInr:600, category: “cassandra”},
}
但在那个教程和我所经历的每一个其他教程中,最后都在cassandra中创建了常规表。我无法将Cassandar模型与我正在创建的模型连接起来
例如,我创建了一个名为Employee的列族,如下所示:
create columnfamily Employee(empid int primary key,empName text,age int);
现在我插入了一些数据,我的列族如下所示:
对我来说,这看起来像一个常规的关系表,而不像作者解释的数据模型。如何创建一个员工列族,其中每一行表示具有不同属性的员工?比如:
Employee{
101:{name:Emp1,age:20}
102:{name:Emp2,salary:1000}
102:{manager_name:Emp3,age:45}
}
}卡桑德拉使用一种特殊的主键,称为复合键。这是分区的表示形式。这也是卡桑德拉能很好地伸缩的原因之一。复合键用于确定存储行的节点 控制台中的结果可能是行的结果集,但cassandra的intern组织与此不同。您是否尝试过查询没有主键的表?您很快就会发现,由于分区的原因,您无法查询这种灵活性
之后,您将了解为什么我们必须使用查询优先设计cassandra。这与RDBBS完全不同。您所理解的是正确的。只要相信它。在内部,cassandra存储的列与问题中的图像完全相同。 现在,您希望插入一个在创建Employee表时未定义的列。对于动态列,始终可以使用地图数据类型 比如说
create table Employee(
empid int primary key,
empName text,
age int,
attributes Map<text,text>);
更新-
创建动态柱模型的另一种方法如下所示
create table Employee(
empid int primary key,
empName text,
attribute text,
attributevalue text,
primary key (empid,empName,attribute)
);
让我们插几句-
insert into Employee (empid,empName,attribute,attributevalue) values (102,'Emp1','age','25') ;
insert into Employee (empid,empName,attribute,attributevalue) values (102,'Emp1','manager','emp2') ;
insert into Employee (empid,empName,attribute,attributevalue) values (102,'Emp1','department','hr') ;
此数据结构将创建一个宽行,其行为类似于动态列。您可以看到主键empid和name对于所有三行都是通用的,只有属性和值会更改
希望这会有所帮助
您引用的站点似乎非常旧。他们在另一页中提到“使用Cassandra 1.2的首选方法是cqlsh”。此外,他们还谈到了“超级专栏”。说真的,请查找一些更新的文档。DataStax Academy是一条出路:
insert into Employee (empid,empName,attribute,attributevalue) values (102,'Emp1','age','25') ;
insert into Employee (empid,empName,attribute,attributevalue) values (102,'Emp1','manager','emp2') ;
insert into Employee (empid,empName,attribute,attributevalue) values (102,'Emp1','department','hr') ;