2017-02-07 7 views
1

Я пытаюсь получить BinaryDocuments, загруженные cbworkloadgen из Couchbase 4.0.0-4051 Community Edition. Версия клиента Couchbase Java - 2.4.1.Couchbase SDK не может декодировать двоичный документ

Исключение дается декодер -

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.

Что я делаю неправильно? Может кто-нибудь, пожалуйста, скажите мне? Или это ошибка, связанная с неправильным значением в поле flags?

+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 Вы можете посмотреть. Я не очень люблю java sdk, но только кэш-память весна-кушетка. – rohanagarwal

+0

rohanagarwal - эти функции N1QL не связаны с Java. – geraldss

1

Ну, из-за нехватки времени я изменил подход, так как у меня также возникали ошибки памяти при асинхронном просмотре представления на ведро миллионов документов.

Что касается этой проблемы, возможно, он задает поле, заданное cbworkloadgen без опции -j, для каждого документа - 0, а BinaryTranscoder считает, что это не бинарный документ из-за этого значения. Я столкнулся с проблемой, используя N1ql вместо do(). Однако я не уверен, что это проблема с cbworkloadgen, где он не устанавливает правильные флаги.