我正在检查sstabledump
的输出,以便更好地理解cassandra数据模型,我有一些问题
从sstabledump
的输出看起来似乎
问题1:对于每个分区,以及分区内的每一行,都有一个position
密钥。这个值对应的是什么?物理存储细节?究竟是怎么回事?
问题2:每个分区内的每一行都有一个type: row
键值对。这种类型可以是其他什么吗?如果有,那是什么?如果不是
答案 0 :(得分:2)
分区键是你指定为主键的murmur3哈希值。 Consistent hashing与该哈希一起使用,以确定该分区所属的群集中的哪个节点及其副本。在每个分区内,数据按聚类键排序,然后按行中的单元名称排序。使用该结构时,如果一次插入一行,则时间戳等冗余内容仅作为来自分区的vint delta序列插入一次以节省空间。
在磁盘上,分区按此散列键的顺序排序。 position
键的输出仅指sstable数据文件中的位置(解压缩的字节偏移量)。 type
还可以在该点中识别为静态块,该块位于每个分区的开头,用于任何静态单元格或远程逻辑删除标记(开始或结束)。请注意,即使没有物理地写入磁盘(即重复的时间戳),有时可以在json中重复使用sstabledump值以获得可读性。
您可以在分区中包含许多这些行,例如,时间序列的通用数据模型是使用时间戳作为群集键,这会产生具有数百万行的非常宽的分区。 Pre 3.0以及数据存储更接近big table的设计。它基本上是Map<byte[], SortedMap<byte[], Cell>>
,其中排序映射的比较器基于模式进行了更改。它没有区分分区中的行和列,并且导致大量冗余数据,并且经过重新设计以更好地适应查询语言。
更多参考资料: