Cassandra改变列类型:不兼容类型的最佳方式?

时间:2016-06-03 17:39:47

标签: cassandra

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

这是我得到的错误

  

[由于配置问题导致查询无效] message =“无法从类型int更改COLUMN_NAME以输入tinyint:类型与订单不兼容。”>

使用强制转换或其他类似查询技巧处理此问题有一个很好的方法吗?

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

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

1 个答案:

答案 0 :(得分:0)

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

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

  1. 添加新列。
  2. 保留旧栏目。 (您可以将其重命名为COLUMNNAME_OBSOLETE)。
  3. 更新代码后,只需在代码中的新列中填充数据。
  4. 在将数据读入域对象时,如果新列为null,则用旧列填充它。
  5.   

    在我们的一个项目中,我们针对prod数据执行了上述步骤,并且工作正常。几个月后,当我们不需要COLUMNNAME_OBSOLETE时,我们删除了该列。