cassandra和使用cql插入列

rur96b6h  于 2021-06-15  发布在  Cassandra
关注(0)|答案(2)|浏览(519)

为了理解cassandra中的一些基本原理,我认为开发人员在设计数据模型时可以获得的一个优势是通过向由键标识的行动态添加列。这意味着我可以对我的数据进行建模,以便在有意义的情况下,键可以是关系数据库中的用户id之类的东西,例如,我可以创建任意数量的与该用户相关的列。
我不明白的是,为什么在clq示例中,特别是在create table/columnfamily示例中,会如此强调预定义列:

CREATE TABLE emp (
  empID int,
  deptID int,
  first_name varchar,
  last_name varchar,
  PRIMARY KEY (empID, deptID)
);

这种类型的模型仅仅填充到关系数据库中不是更有意义吗?如果在运行时之前我不知道自己的列名,需要动态创建它怎么办?我是否必须使用altertable来使用clq向行添加一个新列?我想到的特定应用程序用例只需要一个键标识符和任意列名,其中列名可能包含一个timestamp+变量标识符。
Cassandra是合适的工具吗?文档中预定义的列仅仅是一个示例吗?如何使用现有的列族/表添加动态列名?

eh57zj3b

eh57zj3b1#

我是否必须使用altertable来使用clq向行添加一个新列?
是的,必须先定义架构,然后才能插入“新列”。但是,您可以定义一列数据集合。看看datastax's'storift to cql upgrade'blog中混合动态和静态列下的'tag'示例。
如何使用现有的列族/表添加动态列名?
在cql中,必须首先使用 ALTER 关键字。我猜这是为了确保列族包含指定的列,从而消除错误添加列的可能性(更好的数据质量)。
Cassandra是合适的工具吗?
我认为是这样的,但是如果您需要在不指定模式更改语句的情况下动态添加列,那么您可能应该研究基于thrift的API,它可以做到这一点,但只是一个友好的警告,datastax建议新应用程序使用cql。

pinkon5k

pinkon5k2#

我在邮件列表中的回答是:
对Cassandra来说,无模式性根本不是一个基本概念。您可能正遭受过多文档数据库的影响。经验表明,随着项目和团队的发展,“email列是文本,birthdate列是时间戳”的模式非常有用。
关系模型本身没有什么问题(根据通常关于需要反规范化以缩放的解释)。cassandra的目标是使应用程序具有可伸缩性,而不是为了与众不同而把sql婴儿和洗澡水一起扔掉。
也就是说,如果你真的不知道什么类型的属性可以应用(通常是因为它们是用户生成的),你可以使用一个Map。

相关问题