Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra “冗余”集群列有什么缺点吗?_Cassandra_Cql - Fatal编程技术网

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 如果查看数据的物理存储方式,就不难看出为什么会存在这种差异。在前一种情况下,每个时间戳有两个

我注意到,在某些情况下,将常规Cassandra列更改为集群列可以显著减小表的大小

对于此示例表:

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的最新版本之前,在使用异常处理程序时不会在墓碑中正确说明,因此避免范围墓碑通常是一个好主意,除非您确实需要它们