最近我一直在从我们新项目的角度研究 Cassandra,并从这个社区和它的 wiki 中学到了很多东西。但是我还没有发现任何关于如何在 Cassandra 中管理更新在物理磁盘空间管理方面的信息,尽管它似乎与使用压缩的记录删除管理非常相似。
假设有 100 条记录,每条记录有 5 个列值,所以当所有更改都将被刷新磁盘时,所有记录将被相邻写入,并且当删除操作完成时,它首先在内存表中标记,并且物理记录在配置中设置的一段时间后被删除,或者当它满了。压实过程占用了空间。
现在的问题是,一方面是模式较少,一开始没有固定数量的列,但另一方面,当压缩过程发生时..它是否像传统的 RDBMS 那样将记录相邻地放在磁盘上以加快读取过程至于 RDBMS,它很容易,因为它们必须根据列数据类型的声明分配固定数量的空间。
但是 Cassandra 如何在压缩过程(更新/删除)中准确地将记录放置在磁盘上以加快读取速度?
与压缩相关的另一个问题是,当没有删除查询但有一个更新查询使用一些可变长度数据更新现有记录或完全插入一个新列时,那么压缩如何使其空间在磁盘上已存在的数据行之间可用?