【问题标题】:Change order of composed primary key更改组合主键的顺序
【发布时间】:2016-03-12 23:45:02
【问题描述】:

我有一个 Cassandra,我想使用 cql "IN" 查询。因此,我必须更改组合主键中元素的顺序(只有最后一块可用于“IN”查询)。该表相当大,但现在不跨越多个节点。

所以我现在尝试的(不起作用)如下:

  1. 创建具有相同列但主键元素顺序不同的新列族
  2. 停止写入进程和 nodetool 刷新
  3. 复制所有 /data/keyspace/columnfamily/ 文件
  4. 重命名文件以匹配新的列族名称
  5. 使用 sstable 加载器将文件加载到新列族中

但后来主键就搞砸了:

无法将值“53ccb45d4ab0d3560e8c36fd”(对于列“cent”)解码为 int:解包需要长度为 4 的字符串参数

我也不能使用 COPY ... TO ... 因为这只是超时...

有什么想法吗?

【问题讨论】:

  • 不要使用 IN 查询 :-) 它无效(例如,请参阅 lostechies.com/ryansvihla/2014/09/22/…
  • @jny well scylla 应该可以解决这个问题。但无论如何,如果替代方案只是用许多类似的 quereis(我目前正在做的)锤击数据库,那么性能也很差。我真的很想看到然后 IN 而不是仅仅相信 :-)
  • @jny 也:来自您的链接:““in”关键字有它的位置,例如在查询分区内部时,但总的来说,我希望它不能跨分区执行,我到目前为止修复了很多性能问题,我还没有看到它比单独的查询和异步更快。”,这正是我想要做的。

标签: cassandra cql cassandra-2.0 cql3


【解决方案1】:

GIT 上有几个不错的批量加载程序,它们运行得更好,并且不会像 CQLSH COPY TO/FROM 工具那样超时。

You can find it here.here

否则,我建议您使用 SPARK 之类的工具为您移动数据。

您也可以在创建第二个表后使用 SCALA:

val mydata = sc.cassandraTable("mykeyspace","mytable")
.select("key","column1","column2","column3")

mydata.saveToCassandra("whateverkeyspace","whatevertable", SomeColumns("key","column1","column2","colum3"))

【讨论】:

    猜你喜欢
    • 2021-03-07
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    相关资源
    最近更新 更多