【问题标题】:Cassandra and using cql to INSERT a columnCassandra 并使用 cql 插入列
【发布时间】:2013-05-27 02:05:07
【问题描述】:

在尝试了解 Cassandra 的一些基础知识时,我的印象是,开发人员在设计数据模型时可以利用的优势之一是动态地将列添加到由键标识的行中。这意味着我可以对我的数据进行建模,以便在有意义的情况下,键可以是关系数据库中的 user_id 之类的东西,例如,我可以创建与该用户相关的任意数量的列。

我不明白为什么在 CLQ 示例中如此强调预定义列,尤其是在 CREATE TABLE/COLUMNFAMILY 示例中:

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

这种类型的模型仅用于关系数据库不是更有意义吗?如果我直到运行时才知道我的列名并且需要动态创建它怎么办?我是否必须使用 ALTER TABLE 向使用 CLQ 的行添加新列?我想到的特定应用用例只需要一个键标识符和任意列名,其中列名可能包含时间戳+变量标识符。

Cassandra 是不是合适的工具?文档中的预定义列仅仅是一个示例吗?如何在现有列族/表中添加动态列名?

【问题讨论】:

  • Lyuben 已经在这里回答了,你为什么要重新发布到邮件列表?要有耐心,尤其是在周末。
  • 对此我深表歉意。我在帖子中明确表示我正在这样做。我会看看我是否可以删除这个线程并跟进邮件线程。

标签: database cassandra


【解决方案1】:

我是否必须使用 ALTER TABLE 向使用 CLQ 的行添加新列?

是的,必须先定义架构,然后才能插入“新列”。 但是,您可以定义 1 列作为数据集合。查看 datastax 的 'thrift to cql upgrade' 博客中混合动态和静态列下的“标签”示例。

如何在现有列族/表中添加动态列名?

在 CQL 中,您必须首先使用 ALTER 关键字更改表(列族)的结构。我的猜测是,这是为了确保列族包含指定的列,从而消除错误添加列的可能性(更好的数据质量)。

Cassandra 是不是合适的工具?

我认为是的,但是如果您需要在不指定架构更改语句的情况下即时添加列,那么您可能应该研究可以做到这一点的基于节俭的 API,但只是一个友好的警告,datastax 建议新应用程序使用 CQL。

【讨论】:

  • 查看 Twissandra 示例,该示例介绍了使用类似 twitter 的数据模型的 cassandra。此外,如果您使用 cassandra-cli 创建列族而不定义列名,则在运行时向行添加列将检查列是否存在并更新它,如果不存在,它将为您动态创建列,这就是您想要。
【解决方案2】:

我在邮件列表中的回答:

对于 Cassandra 来说,无模式根本不是一个基本概念。您可能因过多接触文档数据库而受苦。经验表明,随着项目和团队的发展,使用架构来表示“电子邮件列是文本,出生日期列是时间戳”非常有用。

关系模型本身并没有什么问题(根据通常的解释,需要非规范化以进行缩放)。 Cassandra 致力于使应用程序规模化,而不是为了与众不同而将 SQL 婴儿与洗澡水一起扔掉。

也就是说,如果您真的不知道可能应用哪些类型的属性(通常是因为它们是用户生成的),您可以使用地图。

【讨论】:

    猜你喜欢
    • 2012-10-24
    • 2012-02-26
    • 2013-05-22
    • 2014-05-10
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多