据我所知,Cassandra使用“墓碑”作为删除标记。 因为SSTable是不可变的,所以它使用逻辑删除标记来标记删除的记录。 那么,哪里的墓碑已经标记在SSTable文件中? 是否在SSTable或其他地方的索引文件中标记? 我想了解墓碑标记流程的具体逻辑。Cassandra的墓碑物理位置
回答
来自Aaron Morton的article应该详细解释墓碑和删除的工作原理。信用应该是真正属于他的。如果您想查看逻辑删除实现,请参阅this以获取更多信息。下面是从网站提取的一些要点来回答这个问题。
当一列被删除时,DeletedColumn又名Tombstone创建于 Cassandra。该DeletedColumn将有:
名称:列的名称删除
值:当前服务器时间为自Unix纪元(整数)秒。这被称为 作为localDeleteTime,并在(cassandra)GC过程中使用。
时间戳:作为由客户端
提供的突变然后被施加到的memTable以两种方式中的一种。如果 memtable不包含该行的命名列,则它只是简单地添加到memtable中的 。如果存在一个现有的列,则它是 reconcile()'与删除的列。新的DeletedColumn将 替换现有的列,如果它具有更高的(客户端提供的) 时间戳。 localDeleteTime不用于对帐。在此 点,memtable中的任何以前的列值都会丢失,并且不会将 持久保存到磁盘。
我们现在有一个墓碑。如果没有其他突变,则DeletedColumn稍后将保留到SSTable,就像其他任何 其他列一样。
所以它是记录表有墓碑标记。解释继续;从网站摘录。
在本地读取行值期间,运行删除请求期间使用的同一个对帐过程 。多个行片段 从当前memtable,memtables挂起的flush和 磁盘上的SSTables中检索。这些碎片被缩小,同名的列被调和以达到当前值。
例如,如果有一个行片段中的关键“foo”的 一个的SSTable,上面写着列“酒吧”是“巴兹”,而在另一个 的SSTable一个DeletedColumn具有较高的时间戳,当他们重归于好 DeletedColumn将“赢”。该行的当前视图将会删除 “栏”列。
- 1. Cassandra不断的墓碑压实的表
- 2. cassandra斑点,墓碑和空间回收
- 3. 墓碑清理内存WP7
- 4. 将图像恢复到WP7墓碑后的相同位置
- 5. Windows phone 7 silverlight墓碑
- 6. “WP7”突发墓碑问题
- 7. WP7墓碑内存保存
- 8. Windows Phone 7:与URIs墓碑?
- 9. 墓碑的画布可见性属性
- 10. SQL Server 2008的墓碑问题
- 11. 不能墓碑ItemsBox的列表框
- 12. wp7中的用户控件墓碑
- 13. 如何理解“估计投掷的墓碑”?
- 14. 如何正确保存页面的viewmodel来处理墓碑
- 15. 导航和墓碑 - 最佳实践
- 16. 从墓碑归来时RootVisual为null?
- 17. 墓碑限达到100K细胞
- 18. WP 7.5 - 如何测试墓碑?
- 19. 我还需要在芒果墓碑吗?
- 20. 查看许多墓碑警告
- 21. ViewModel依赖于服务+墓碑
- 22. XNA - WP7 - TiledLib - 序列化和墓碑
- 23. Cassandra删除性能取决于墓碑数量或单元格数量?
- 24. 出于性能原因正确处理墓碑和后退键?
- 25. WP7控件:从墓碑恢复后何时设置VisualState?
- 26. Hadoop配置物理位置
- 27. cassandra的物理磁盘空间管理
- 28. 墓碑化用户所在的上次访问过的页面
- 29. 开始新的应用程序的实例,防止墓碑
- 30. 如何获得一个cql查询的墓碑计数?