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 编辑最佳实践:删除和重新插入与更新?的主要内容,如果未能解决你的问题,请参考以下文章

深度 | Cassandra数据模型设计最佳实践

系列 | Cassandra 数据模型设计最佳实践(上)

在Cassandra 3.0多节点集群中回收磁盘空间的最佳实践

在 Laravel 中删除行和插入行的最佳方法是啥

Spring Boot 中 JWT 的最佳实践是啥?

Astyanax Cassandra 驱动程序在批量插入期间意外删除主机