2017-02-07 8 views
1

Couchbase 4.0.0-4051 Community Edition에서 cbworkloadgen에 의해 업로드 된 BinaryDocuments를 가져 오려고합니다. Couchbase Java 클라이언트 버전은 2.4.1입니다. 디코더에 의해 주어진Couchbase SDK는 바이너리 문서를 디코딩 할 수 없습니다.

는 예외입니다 - JsonDocument 것들에 대한


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

괜찮 일 - 나는 문서를 얻으려면 다음을 사용

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) 

. 행은 AsyncViewRow입니다.

내가 뭘 잘못하고 있니? 누군가 나에게 말해 줄 수 있니? 또는 플래그 필드의 잘못된 값과 관련된 버그입니까?

+0

실제로 저장하고 가져 오는 것과 같은 더 정확한 답변을 얻으려면 더 많은 정보를 추가 할 수 있습니다. – rohanagarwal

답변

0

직접 이진 문서를 디코딩 할 수 없습니다. Serializable을 구현하는 항목을 저장하면 직렬화되어 Couchbase에 저장되고 쉽게 검색 할 수 있습니다. 그러나 N1QL 쿼리를 실행하고 바이너리 데이터를 가져 오려고하면 해당 데이터를 디코딩 할 수 없습니다. 이것은 Couchbase가 아직 지원하지 않는 것입니다. Json 문서에서도 동일한 작업을 수행 할 수 있습니다.

+0

N1QL은 BASE64 인코딩/디코딩 기능을 제공합니다. – geraldss

+0

@geraldss https://forums.couchbase.com/t/converting-byte-value-retrieved-using-n1qlto-java-object/11147보세요. 나는 자바 sdk에 그다지 많은 것이 아니지만 봄철 couchbase-cache 만 있습니다. – rohanagarwal

+0

rohanagarwal -이 N1QL 함수는 Java와 관련이 없습니다. – geraldss

1

글쎄, 시간 낭비로 인해 뷰를 비동기 적으로 수백만 개의 문서를 반복 할 때 메모리 오류가 발생하기 때문에 접근 방식을 변경했습니다.

이 문제와 관련하여 각 문서가 -j 옵션없이 cbworkloadgen에 의해 설정된 필드 플래그가 0이고 BinaryTranscoder는이 값으로 인해 이진 문서가 아니라고 생각할 수 있습니다. get() 대신 N1ql을 사용하여 문제를 해결했습니다. 그러나, 이것이 올바른 플래그를 설정하지 않는 cbworkloadgen의 문제인지 확실하지 않습니다.