6

我在 Hector 和 Cassandra 的教程中看到了DynamicCompositeType.

任何人都可以详细说明之间的区别

   create column family Composite with comparator ='DynamicCompositeType
       (t=>TimeUUIDType,s=>UTF8Type)'
       and default_validation_class=UTF8Type and key_validation_class=UTF8Type;

create column family Composite
    with comparator = 'CompositeType(TimeUUIDType,UTF8Type)' 
    and key_validation_class = 'UTF8Type' 
    and default_validation_class = 'UTF8Type'

我没有在 Cassandra 文档中找到它

4

2 回答 2

6

它可能有助于理解 Cassandra 如何存储数据以及组合实际上是什么:

  • 所有数据,无论您使用哪个验证器/比较器,都存储为字节。当您指定验证器时,您只是要求 Cassandra 确保这些字节按照您的需要进行编码。相比之下,比较器只是根据特定于您给它的编码的自然顺序对列进行排序。

  • 因此,组合只是具有特定编码的字节数组。这种编码非常简单:对于每个组件,它存储一个两个字节的长度,然后是字节编码的组件,然后是一个终止位,用于确定它是包含还是排除。由于任何东西都可以存储在字节数组中,因此您可以拥有不同的组件类型——但您必须知道它们是什么并自己解码/编码它们。

  • 为了实现动态复合,Hector 将额外的类型数据写入字节数组,以便在读取字节时知道如何解码字节。静态组合无法做到这一点,因为没有类型信息。

于 2012-11-28T14:43:17.183 回答
0

对于静态复合 CF,每列都将具有相同的类型,而对于动态 CCF,每列可以具有不同的数据类型。

如果您确定 CF 中的数据类型最好坚持静态定义,否则使用动态 CF。

于 2012-11-28T12:51:32.160 回答