1

我正在尝试从 Couchbase 4.0.0-4051 社区版获取 cbworkloadgen 上传的 BinaryDocuments。Couchbase Java 客户端版本是 2.4.1。

解码器给出的例外是 -

WARNING: Decoding of document with BinaryTranscoder failed. exception: Flags (0x0) indicate non-binary document for id pymc0, could not decode., id: "pymc0", cas: 1486468016723525632, expiry: 0, flags: 0x0, status: SUCCESS, content size: 2048 bytes, content: "".

    com.couchbase.client.java.error.TranscodingException: Flags (0x0) indicate non-binary document for id pymc0, could not decode.
com.couchbase.client.java.error.TranscodingException: Flags (0x0) indicate non-binary document for id pymc0, could not decode.
        at com.couchbase.client.java.transcoder.BinaryTranscoder.doDecode(BinaryTranscoder.java:32)
        at com.couchbase.client.java.transcoder.BinaryTranscoder.doDecode(BinaryTranscoder.java:26)
        at com.couchbase.client.java.transcoder.AbstractTranscoder.decode(AbstractTranscoder.java:42)
        at com.couchbase.client.java.CouchbaseAsyncBucket$1.call(CouchbaseAsyncBucket.java:274)
        at com.couchbase.client.java.CouchbaseAsyncBucket$1.call(CouchbaseAsyncBucket.java:270)
        at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(OnSubscribeMap.java:69)

我使用以下来获取文件-


AbstractDocument<?> doc = destinationBucket.get((String) row.key(), isJson ? JsonDocument.class : BinaryDocument.class);

对于 JsonDocument,一切正常。行是 AsyncViewRow。

我究竟做错了什么?有人可以告诉我吗?或者这是与标志字段中的错误值相关的错误?

4

2 回答 2

1

好吧,由于时间不够,我改变了方法,因为在百万个文档桶上异步迭代视图时,我也遇到了内存不足的错误。

关于这个问题,可能是他在没有 -j 选项的情况下对每个文档的 cbworkloadgen 设置的 flags 字段为 0 并且 BinaryTranscoder 认为它不是二进制文档,因为这个值。我通过使用 N1ql 而不是 get() 解决了这个问题。但是,我不确定这是否是 cbworkloadgen 未设置正确标志的问题。

于 2017-02-10T09:40:54.563 回答
0

您无法自行解码二进制文档。如果你保存实现了 Serializable 的东西,它将被序列化并保存到 Couchbase,你可以轻松地检索它。但是,如果您触发 N1QL 查询并尝试获取二进制数据,您将无法对其进行解码。这是 Couchbase 还不支持的东西。你可以对 Json 文档做同样的事情。

于 2017-02-09T06:30:47.240 回答