Couchbase SDK не может декодировать двоичный документ

Я пытаюсь получить BinaryDocuments, загруженные cbworkloadgen, из Couchbase 4.0.0-4051 Community Edition. Версия клиента 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 все работает нормально. row - это AsyncViewRow.

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


person Pranav    schedule 07.02.2017    source источник
comment
Вы можете добавить дополнительную информацию, чтобы получить более точные ответы, например, что на самом деле нужно сохранять и получать и т. Д.   -  person rohanagarwal    schedule 09.02.2017


Ответы (2)


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

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

person Pranav    schedule 10.02.2017

Вы не можете самостоятельно декодировать двоичные документы. Если вы сохраните что-то, что реализует Serializable, оно будет сериализовано и сохранено в Couchbase, и вы сможете легко получить то же самое. Но если вы запустите запрос N1QL и попытаетесь получить двоичные данные, вы не сможете их декодировать. Это то, что Couchbase еще не поддерживает. Вы можете сделать то же самое с документами Json.

person rohanagarwal    schedule 09.02.2017
comment
@geraldss forum.couchbase.com/ t / Можете посмотреть. Я не очень люблю java sdk, но только spring-couchbase-cache. - person rohanagarwal; 10.02.2017
comment
rohanagarwal - эти функции N1QL не связаны с Java. - person geraldss; 10.02.2017
comment
Чтобы уточнить, я не использовал N1ql, а использовал get (), предоставленный SDK. Get () в классе CouchbaseAsyncBucket обращается к флагам и переходит к декодированию документа (например, двоичного или Json). Однако значение флага (0x0) отклоняется BinaryTranscoder. Мне было интересно, проблема ли это в генераторе рабочей нагрузки Couchbase или я что-то упустил. - person Pranav; 22.02.2017