1

如果我必须预定义所有列,如何利用 cassandra 的可变列键/值结构?如果我使用更新表命令,它将为所有没有该列的行插入空值。这与关系数据库相同。

例如,对于联系人列族,我有姓名、电话、电子邮件。我有 100 个联系人拥有所有 3 个字段。然后 101 号联系人有我想添加的 Skype id。如果我使用插入语句,它不会让我添加 skypeid,因为它没有在 CF 中定义。所以我必须运行 alter 语句来更改 CF,然后所有前 100 个联系人都将有一个空字段。

4

2 回答 2

1

Thrift API 可以即时创建列。例如,在 Astyanax 中,您可以插入未在架构中定义的列。但这仍然会使您的前 100 列有效地为该列保留一个空值,因此没有真正的理由避免更新架构和一些缺点。这就是 CQL 强制“先告诉模式”的原因。

现在,如果您要处理真正的动态字段,则可以在 CQL中使用集合。但在您的示例中并非如此。

于 2013-06-04T09:00:14.817 回答
1

如果我使用插入语句,它不会让我添加 skypeid,因为它没有在 CF 中定义。所以我必须运行 alter 语句来更改 CF,然后所有前 100 个联系人都将有一个 null 字段

但也许不是问题。CQL3的DataStax 文档INSERT

INSERT一个或多个列原子地和隔离地写入 Cassandra 表中的记录。不返回任何结果。您不必定义所有列,构成键的列除外。缺少的列不占用磁盘空间

于 2013-06-27T16:19:02.573 回答