Cassandra “冗余”集群列有什么缺点吗?
我注意到,在某些情况下,将常规Cassandra列更改为集群列可以显著减小表的大小 对于此示例表:Cassandra “冗余”集群列有什么缺点吗?,cassandra,cql,Cassandra,Cql,我注意到,在某些情况下,将常规Cassandra列更改为集群列可以显著减小表的大小 对于此示例表: id UUID K time TIMESTAMP C state TINYINT (C) value DOUBLE 如果state是普通列,则100000行的大小估计为3.9 MB;如果state是使用中的方法估计的集群列,则100000行的大小估计为2.4 MB 如果查看数据的物理存储方式,就不难看出为什么会存在这种差异。在前一种情况下,每个时间戳有两个
id UUID K
time TIMESTAMP C
state TINYINT (C)
value DOUBLE
如果state是普通列,则100000行的大小估计为3.9 MB;如果state是使用中的方法估计的集群列,则100000行的大小估计为2.4 MB
如果查看数据的物理存储方式,就不难看出为什么会存在这种差异。在前一种情况下,每个时间戳有两个内部单元-一个用于状态,一个用于值。在后一种情况下,值被合并到单元密钥中,因此每个时间戳只有一个单元,并且单元密钥的时间戳部分只存储一次
第二个集群列不会对可以查询的内容创建任何新的限制。从id=?的表中选择*?时间>=?时间我认为这里的主要区别在于,如果它是一个集群列,则必须提供插入,因为它是主键的一部分。另外,由于它是主键的一部分,您也不能更新它,这对于某些表来说可能会有问题。如果您对这两个方面都没有任何顾虑,我看不出您为什么不能添加它。我认为这里的主要区别在于,如果它是一个集群列,则必须提供插入,因为它是主键的一部分。另外,由于它是主键的一部分,您也不能更新它,这对于某些表来说可能会有问题。如果您对这两个问题都没有任何顾虑,我看不出您为什么不能添加它。1您可以为每个州创建一行。您的数据模型必须认识到并理解这一点。您可能会为同一id time创建两个状态不同的行,而原始模型不允许这样做 2如果删除,则需要指定状态或创建范围逻辑删除范围删除,因为您要删除给定id和时间的所有行,但它可能是一个状态范围。在2.1中,范围墓碑在读取路径上特别昂贵,并且在Cassandra的最新版本之前,在使用异常处理程序时,在墓碑中没有适当的说明,因此避免范围墓碑通常是一个好主意,除非您确实需要它们。1您可以为每个状态创建一行。您的数据模型必须认识到并理解这一点。您可能会为同一id time创建两个状态不同的行,而原始模型不允许这样做 2如果删除,则需要指定状态或创建范围逻辑删除范围删除,因为您要删除给定id和时间的所有行,但它可能是一个状态范围。在2.1中,范围墓碑在读取路径上特别昂贵,并且在Cassandra的最新版本之前,在使用异常处理程序时不会在墓碑中正确说明,因此避免范围墓碑通常是一个好主意,除非您确实需要它们