我目前正在开发cassandra源代码(2.0.4),我想知道如何使用类ColumnFamily中的方法isMarkedForDelete()。如果我用一个键插入一行,该方法返回false,如果我删除该行,则返回true。这就是我期望的方式;-)但是,这就是我想知道的,如果我再次使用相同的键插入一行,该方法仍然返回false,尽管该行不会被删除(因为它是一个具有相同键的新行)。看起来,删除并重新插入的行始终保持标志,如果它在过去被删除一次。我如何可靠地确定一行是否被删除? 在此先感谢!检查行是否被删除
Q
检查行是否被删除
1
A
回答
6
删除是卡桑德拉是通过写一个新的行被称为墓碑来完成的。逻辑删除将确保该行不会在任何查询中返回(其中一个逻辑删除已在所有节点上达到完全一致)。
该行实际上是从当以下的SSTables删除满意:
- 压实发生
- 墓碑记录比对表gc_grace_seconds旧的(默认为10天)
使用已存在的键插入行不会导致错误,因为Cassandra中的数据结构的行为非常像Java Map。使用相同的键“放入”一行只会覆盖插入的列值,并成功。
确定行是否已被删除的最佳方法是查询行并确保查询中未返回该行。
我不确定你正在使用哪个客户端,但是使用C * 2.0,你应该使用DataStax Java Driver(当前版本为2.0.2)。
相关问题
- 1. SSIS检查记录是否被删除
- 2. 检查视图是否已被删除?
- 3. 检查DateTimePicker日历是否被删除
- 4. 检查实体是否被删除
- 5. 检查是否安全删除一行
- 6. Django Formset - 检查行标记是否被删除
- 7. RichTextBox - 检查换行符是否被删除
- 8. 检测通知是否已被删除
- 9. 检查超时是否已被清除?
- 10. 如何检测空间是否已被删除或删除
- 11. 使用删除键检查下一个项目是否被删除
- 12. 如何检查文件是否可以被删除
- 13. jQuery检查正确的元素是否被“删除”
- 14. 如何检查注册表文件夹是否被删除
- 15. 检查领域对象是否被删除
- 16. 检查元素是否已被删除JQuery
- 17. 如何检查表格是否已被删除?
- 18. 如何检查记录是否已被删除
- 19. 如何检查TabLayout中的Tab是否已被删除?
- 20. 如何检查文件是否被创建/删除/更改(Bash)
- 21. mediawiki:检查当前页面是否被删除页面
- 22. Doctrine2 - 检查相关条目是否被删除(单向关系)
- 23. 在PHP中,检查文件是否可以被删除
- 24. 检查是否OU从意外删除
- 25. 检查记录是否老删除它
- 26. 是否可以删除“检查元素”?
- 27. 是否有可能检查一个类是否在jquery中被删除
- 28. 检查行是否被插入
- 29. 是否有可能获得一行被删除的SQL查询?
- 30. 检查是否有任何复选框被检查敲除 - PhoneJS
感谢您的回答!我理解墓碑的原则是为了标记一行删除,稍后在一个压缩文件中完成。但是为什么在从SSTables实际删除行之前,如果用相同的键重新插入行,逻辑删除不会被删除? – user3581199
如果在删除行之后再次插入该行,则该行键的逻辑删除不再是该行键的最新“写入”,因此此时逻辑删除不相关。 –