Cassandra 编辑最佳实践:删除和重新插入与更新?
Posted
技术标签:
【中文标题】Cassandra 编辑最佳实践:删除和重新插入与更新?【英文标题】:Cassandra Best Practice on edits: delete & re-insert vs. update? 【发布时间】:2015-05-21 22:14:58 【问题描述】:我是 Cassandra 的新手。我在网上看很多例子。这是 GitHub 上 JHipster Cassandra 示例中的一个:
https://gist.github.com/jdubois/c3d3bedb869466731316
每当用户数据发生变化时,存储库 save(user) 方法执行读取(以查找存在)然后删除并重新插入所有非规范化表中的现有用户。
这是最佳做法吗? 这仅仅是因为这个样本的数据模型是如何设计的吗? 此示例的设计是否是将 POJO 框架扭曲为 NoSQL 数据库设计的结果?
我什么时候只想在 Cassandra 中进行更新?它支持字段级别的更新,因此似乎是首选。
【问题讨论】:
【参考方案1】:首先,删除操作应该是批处理的一部分,以实现更强大的错误处理。但看起来代码也存在一些并发问题。它将根据之前读取的当前用户值更新用户。在 save() 实际执行时,假设这仍然是最新值是不保存的。它还将覆盖查找表中当时可能正在为不同用户使用的任何键。例如。在执行 insertByLoginStmt 时,其他用户的登录可能已经存在。
【讨论】:
感谢您概述了此在线示例中明显的一些缺陷。当我继续使用自己的持久层时,我会记住它们……就是说。您对“编辑:删除和插入与更新”的真正问题有任何意见吗? 应尽可能避免删除,您应该尝试model around it。至于插入与更新,无论如何它们之间只有subtle differences,所以它们的工作原理基本相同。【参考方案2】:在插入新行之前不必删除一行。 但是,如果您要替换行并且新列与现有列不同,那么您需要删除所有现有列并插入新列。或者插入新的和删除旧的,如果批量发生也没关系。
【讨论】:
以上是关于Cassandra 编辑最佳实践:删除和重新插入与更新?的主要内容,如果未能解决你的问题,请参考以下文章