cassandra - 来自 cassandra CLI 的 DROP COLUMN FAMILY 不会删除 CF

标签 cassandra cassandra-cli

我们尝试使用 cassandra cli 删除 CF

DROP COLUMN FAMILY cfName

当我们从 CLI 列出 CF 时,它不存在,当我试图通过 hector 获取现有 CF 时

我仍然可以看到 CF 名称

   KeyspaceDefinition keyspaceDefinition = newConnection().describeKeyspace(keyspaceName);
    keyspaceDefinition.getCfDefs();

CF 中的数据不存在但是,CF 仍然列出,在通过 hector 列出 CF 之后,如果我执行 cassandra -cli list column families 我可以再次看到我删除的 CF

最佳答案

我也不得不在 Cassandra 1.1 上处理这个问题。基本上,我的列族已经损坏,更改其模式的唯一方法是删除/恢复键空间(当时 DataStax 引导我完成了)。

如果您与 DataStax 签订了支持契约(Contract),我强烈建议您在继续之前联系他们。他们会告诉您的第一件事是,这是特定版本的 Cassandra 1.1 中的错误,您应该升级。我没有测试过,但根据他们的说法,就地升级将允许您在新版本中修改架构。因此,您可以通过升级到 1.2 或 2.0 来解决此问题。

就我而言(生产、企业环境)现场升级不是一种选择。为了解决这个问题,我基本上不得不删除我的整个键空间,重新创建它(和我的列族),然后从快照中恢复。我松散地遵循了 instructions found here :

  • 为每个节点上的键空间拍一张快照。快照文件应存储在 [keyspaceName]/snapshots 目录中,但为了安全起见,我将我的快照文件复制到了另一个非 Cassandra 位置。
  • 删除您的 key 空间。
  • 停止所有节点。
  • 在每个节点上,删除 key 空间目录(但不包括快照目录)中的 .db 文件。
  • 将快照目录中的文件复制回 key 空间目录。
  • 重启一个节点
  • 从该节点的 cassandra-cli 重新创建您的 key 空间。
  • 验证您的数据是否存在。
  • 重启其余节点。

关于cassandra - 来自 cassandra CLI 的 DROP COLUMN FAMILY 不会删除 CF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22982954/

相关文章:

cassandra - 为什么以及何时在现实生产场景中使用 Cassandra 中的 Vnode?

java - Cassandra 与工作流引擎

database - 我如何使用 Apache Cassandra 构建分层数据库

java - DefaultEntityManager 不允许我使用 <UUID, String> 的 ColumnFamily

python - 处理 100 万行键的 pycassa multiget 的有效方法是什么

cassandra - Datastax 驱动程序限制选项

cassandra - 如何仅在属性未更改时有条件地将数据保存在 cassandra 中

nosql - 添加节点后重新平衡数据

cassandra - 了解 cassandra 的内部数据存储

cassandra - 在 Cassandra 中添加节点通常意味着什么?