如果我必须预定义所有列,如何利用 cassandra 的可变列键/值结构?如果我使用更新表命令,它将为所有没有该列的行插入空值。这与关系数据库相同。
例如,对于联系人列族,我有姓名、电话、电子邮件。我有 100 个联系人拥有所有 3 个字段。然后 101 号联系人有我想添加的 Skype id。如果我使用插入语句,它不会让我添加 skypeid,因为它没有在 CF 中定义。所以我必须运行 alter 语句来更改 CF,然后所有前 100 个联系人都将有一个空字段。
如果我必须预定义所有列,如何利用 cassandra 的可变列键/值结构?如果我使用更新表命令,它将为所有没有该列的行插入空值。这与关系数据库相同。
例如,对于联系人列族,我有姓名、电话、电子邮件。我有 100 个联系人拥有所有 3 个字段。然后 101 号联系人有我想添加的 Skype id。如果我使用插入语句,它不会让我添加 skypeid,因为它没有在 CF 中定义。所以我必须运行 alter 语句来更改 CF,然后所有前 100 个联系人都将有一个空字段。
Thrift API 可以即时创建列。例如,在 Astyanax 中,您可以插入未在架构中定义的列。但这仍然会使您的前 100 列有效地为该列保留一个空值,因此没有真正的理由避免更新架构和一些缺点。这就是 CQL 强制“先告诉模式”的原因。
现在,如果您要处理真正的动态字段,则可以在 CQL中使用集合。但在您的示例中并非如此。
如果我使用插入语句,它不会让我添加 skypeid,因为它没有在 CF 中定义。所以我必须运行 alter 语句来更改 CF,然后所有前 100 个联系人都将有一个 null 字段。
但也许不是问题。CQL3的DataStax 文档INSERT
说
将
INSERT
一个或多个列原子地和隔离地写入 Cassandra 表中的记录。不返回任何结果。您不必定义所有列,构成键的列除外。缺少的列不占用磁盘空间。