【问题标题】:Cassandra alter column type: best way with non-compatible types?Cassandra 更改列类型:不兼容类型的最佳方法?
【发布时间】:2016-06-04 13:18:29
【问题描述】:

我在 Cassandra 中有一个大表,其中有一列 int 类型,但没有值超出 0-10 范围。我想通过将列的类型更改为 tinyint 来减小表大小。

这是我得到的错误

[查询因配置问题而无效] message="无法将 COLUMN_NAME 从 int 类型更改为 tinyint:类型不兼容顺序。">

有没有一种很好的方法可以通过强制转换或其他类似的查询技巧来处理这个问题?

如果不是......并且不关闭数据库,有没有比执行以下操作更好的方法来解决这个问题?

  1. 创建一个 tinyint 类型的新列
  2. 更新我的代码以在写入操作期间将数据复制到此列
  3. 将旧数据复制到新列[可能需要一段时间]
  4. 交换列名
  5. 还原我的代码更改(仅更新一列)
  6. 删除旧的 int 列

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    我会说删除旧列并将数据复制到新列并不理想。

    如果您的 cassandra 列族由单个入口点(服务)访问,我的建议是,

    1. 添加一个新列。
    2. 保留旧列。 (您可以将其重命名为 COLUMNNAME_OBSOLETE)。
    3. 更新代码后,仅根据代码中的新列填充数据。
    4. 将数据读入域对象时,如果新列为空,则用旧列填充。

    在我们的一个项目中,我们针对产品​​数据执行了上述步骤,并且效果很好。几个月后,当我们不需要 COLUMNNAME_OBSOLETE 时,我们删除了该列。

    【讨论】:

      猜你喜欢
      • 2015-10-31
      • 2011-03-25
      • 2023-04-01
      • 2020-11-22
      • 1970-01-01
      • 2017-01-05
      • 2019-03-15
      • 2012-07-04
      • 2018-03-27
      相关资源
      最近更新 更多