Aka*_*all 9 insert cql cassandra
我的理解是,当插入具有相同主键的另一行时,将覆盖行.
例如:
我有专栏(user_id int, item_id int, site_id int)和我的专栏PRIMARY KEY(user_id, item_id)
如果我有下表:
user_id, item_id, site_id
2 3 4
Run Code Online (Sandbox Code Playgroud)
我插入user_id : 2, item_id : 3, site_id : 10,我的新表将是:
user_id, item_id, site_id
2 3 10
Run Code Online (Sandbox Code Playgroud)
不
user_id, item_id, site_id
2 3 4
2 3 10
Run Code Online (Sandbox Code Playgroud)
这种简单的案例是否适用于所有情况?我可能没有注意到任何微妙之处吗?另外,我在文档中找不到这个并通过玩cassandra来得出这个结论,任何人都可以提供文档源吗?
Aar*_*ron 17
是的,这就是Cassandra的设计运作方式.在执行UPDATE或INSERT执行的所有情况下,如果数据存在,将更新数据(基于密钥),如果存在,则不会更新数据.要记住的重要一点是,引擎盖下,UPDATE和INSERT是同义的.如果你认为这两者是相同的,那么你就可以开始理解为什么它的工作方式如此.
话虽如此,你是对的,因为你必须密切关注在文档中找到对这种行为的明确引用.我在文档中找到了最接近的参考文献,并在下面列出了它们:
从UPDATE文档:
如果之前不存在,则创建该行,否则更新.通过包含组成分区键的所有列,在WHERE子句中指定要更新的行.... UPDATE SET操作在主键字段上无效.
从INSERT文档:
除了组成键的列之外,您不必定义所有列....如果列存在,则更新.如果不存在,则创建该行.
虽然这些摘录可能不会出现并且说"小心不要覆盖",但我确实设法找到一篇关于Planet Cassandra的文章更加明确:如何在Cassandra中做一个upsert
Cassandra是一个分布式数据库,可以避免在写入之前读取,因此无论行是否已存在,INSERT或UPDATE都会设置您指定的列值.这意味着插入可以更新现有行,更新可以创建新行.这也意味着很容易意外地覆盖现有数据,因此请记住这一点.
| 归档时间: |
|
| 查看次数: |
6261 次 |
| 最近记录: |