我正在尝试从Couchbase 4.0.0-4051社区版获取cbworkloadgen上传的BinaryDocuments。CouchbaseJava客户端版本是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,一切正常。row 是 AsyncViewRow。
我做错了什么?有人能告诉我吗?或者这是一个与flags字段中的错误值有关的错误?
嗯,由于缺少时间,我改变了方法,因为我在对一桶一百万个文档异步迭代视图时也出现了内存不足错误。
关于这个问题,可能是他标记了cbworkloadgen设置的字段,没有-j选项,每个文档都是0,并且由于这个值,二进制转码器认为它不是二进制文档。我通过使用 N1ql 而不是 get() 来解决这个问题。但是,我不确定这是否是 cbworkloadgen 的问题,因为它没有设置正确的标志。
你不能自己解码二进制文档。如果您保存了实现Serializable的东西,它将被序列化并保存到Couchbase,您可以很容易地检索到它。但是,如果你启动N1QL查询并尝试获取二进制数据,你将无法对其进行解码。这是Couchbase还不支持的。您可以对Json文档执行同样的操作。