【问题标题】:Riak secondary indexes not preserved using Java client when copying keys cross-cluster跨集群复制密钥时,未使用 Java 客户端保留 Riak 二级索引
【发布时间】:2015-03-24 03:11:31
【问题描述】:

所以我将一堆数据从 Riak 集群 A(1.4 集群)复制到 Riak 集群 B(2.0 集群),因为一堆烦人(与我的问题无关)的环境限制导致无法升级集群任何其他方式。

我正在使用 Java 1.4 Riak 客户端与两个集群通信。我从我的 1.4 集群中读取密钥,并且 - 保持完全相同的 IRiakObject - 将其写入 2.0 集群。

如果我在调试器中运行它并检查所说的 IRiakObject,我发现二级索引实际上填充在这个对象上。

但是当我实际运行它时,我发现 2.0 集群不接受二级索引 - 当我在 2.0 集群上为此键执行 GET 时,它们返回为空。

我做错了什么?

示例代码如下。请注意,这是从 Scala 组装的,但它使用的是 Java 库。注意 sourceRiakClient 和 destRiakClient 不对应同一个服务器。 (getBucket 和 cloneBucket 是我写的方法。)

val srcBucket : Bucket = getBucket(sourceRiakClient, bucketName)
val destBucket: Bucket = cloneBucket(destRiakClient, bucketName, srcBucket)
val value: IRiakObject = bucket.fetch(key).execute()
destBucket.store(key, value.getValue).withoutFetch().execute()

【问题讨论】:

    标签: java riak


    【解决方案1】:

    事实证明,通过调用 value.getValue,我将 IRiakObject 转换为 byte[] 并剥离了二级索引信息。当我简单地存储值本身时,我得到了我期望的行为。

    【讨论】:

      【解决方案2】:

      其他集群是否配置为使用 Leveldb 后端?默认情况下 2.0 使用 Bitcask。 Bitcask 不支持二级索引。

      【讨论】:

      • 是的,配置为使用leveldb。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 2019-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多