如果我必须预定义所有列,我如何利用cassandra的变量列键/值结构?如果我使用update table命令,它将为没有该列的所有行插入null。这与关系DB相同。
例如,对于联系人列系列,我有姓名,电话,电子邮件。我有100个联系人都有3个字段。然后编号101联系人有skype id我想添加。如果我使用insert语句,它不会让我添加skypeid,因为它没有在CF中定义。所以我必须运行alter语句来改变CF,然后所有前100个联系人都会为每个联系人都有一个空字段。
答案 0 :(得分:1)
Thrift API可以即时创建列。例如,在Astyanax中,您可以插入未在架构中定义的列。但是这仍然会使您的前100列有效地为该列留下空值,因此没有真正的理由避免更新架构和几个缺点。这就是为什么CQL强制“首先告诉架构有关它。”
现在,如果你有真正的动态字段要处理,你可以在CQL中使用collections。但是在你的例子中并非如此。
答案 1 :(得分:1)
如果我使用insert语句,它不会让我添加skypeid,因为它没有在CF中定义。因此我必须运行alter语句来更改CF,然后所有前100个联系人将为每个联系人提供一个空字段。
但也许不是问题。 DataStax documentation for CQL3 INSERT
说
INSERT
以原子方式独立地将一个或多个列写入Cassandra表中的记录。没有返回结果。除了组成键的列之外,您不必定义所有列。 缺少列在磁盘上不占用空间。