复制密钥跨群集时,使用Java客户端不保留Riak二级索引

时间:2015-03-24 03:11:32

标签: java riak

所以我将一堆数据从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()

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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