【问题标题】:Cassandra frozen keyword meaningCassandra 冻结的关键字含义
【发布时间】:2017-07-20 20:09:57
【问题描述】:

Cassandra中frozen关键字是什么意思?

我正在尝试阅读此文档页面:Using a user-defined type,但他们对 frozen 关键字(他们在示例中使用)的解释对我来说不够清楚:

为了支持未来的功能,用户定义的列定义 或元组类型需要 freeze 关键字。 Cassandra 序列化一个 将具有多个组件的冻结值转换为单个值。为了 示例和使用信息,请参阅“使用用户定义的类型”, “元组类型”和集合类型。

我在网上没有找到任何其他定义或明确的解释。

【问题讨论】:

    标签: database cassandra nosql keyword


    【解决方案1】:

    对于用户定义的类型,我注意到您可以通过添加或删除集合元素来更新冻结集合。例如,假设我们创建一个表如下。

    create type rule_option_udt(display text, code text);
    create TABLE rules (key text, options set<frozen<rule_option_udt>>, primary key (key));
    

    根据定义,我们希望我们不能对选项字段使用 + 或 - 操作。但是您可以像普通集合一样使用添加或删除操作。

    insert into rules (key, options) values ('fruits', {{display: 'Apple', code: 'apple'}})  ;
    
    update rules set options = options + {{display: 'Orange', code: 'orange'}};
    

    上述更新是有效的,但您不能对文本等简单类型执行相同操作。我不确定这是否是预期的性质,但这对我来说是这样的。

    除此之外&lt;frozen&lt;set&lt;udt&gt;&gt; && set&lt;frozen&lt;udt&gt;&gt; 的行为方式相同。在描述表格时,您可以看到两者都显示为set&lt;frozen&lt;udt&gt;&gt;

    【讨论】:

      【解决方案2】:

      在 Cassandra 中,如果您将 UDT 或 Collection 定义为冻结,则无法更新 UDT 或 Collection 的单个项目,您必须重新插入完整值。

      冻结值将多个组件序列化为单个值。非冻结类型允许更新单个字段。 Cassandra 将冻结类型的值视为 blob。必须覆盖整个值。

      来源:https://docs.datastax.com/en/cql/3.1/cql/cql_reference/collection_type_r.html

      @Alon : “长话短说:frozen = immutable”

      【讨论】:

      • 长话短说:冻结 = 不可变
      • frozen&lt;set&lt;udt&gt;&gt;set&lt;frozen&lt;udt&gt;&gt;有区别吗?
      • @jaco0646 对于这两种类型,您可以以相同的方式插入,但您不能在 frozen&lt;set&lt;udt&gt;&gt; 中添加(附加)新 udt
      • @jaco0646 我认为两者是相同的,但是,我们在描述表格时创建其显示相同的列。两者的行为方式也相同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      • 2019-06-01
      相关资源
      最近更新 更多