Я хочу вставлять документы в Couchbase как навалом на Java. Итак, какова стандартная процедура генерации ключей для каждого документа в java..?
какова стандартная процедура генерации ключей для каждого документа в java..?
Ответы (1)
Вы можете использовать «встречный» документ Couchbase в качестве формы последовательности. Используя реактивный подход с Java SDK, это будет выглядеть примерно так, если предположить, что ваш пакет представляет собой List<JsonObject>
с каждым содержимым для сохранения в Couchbase:
//start with a sequence of contents to save
Observable.from(listOfDocumentContent)
//for each content, asynchronously generate something...
.flatMap(content -> bucket.async() //assuming bucket is a `Bucket`
//atomically generate an increasing value, starting from 0
.counter("DOCUMENT_KEY_GENERATOR", 1, 0) //use a more relevant document key
//this gives a `JsonLongDocument`, so extract the number and turn that + the original content into a `JsonDocument` to be saved
.map(cDoc -> JsonDocument.create(KEY_PREFIX + cDoc.content(), content))
)
//next up, asynchronously saving each document we generated in the previous step... You could also use insert since you don't expect the keys to already exist in Couchbase
.flatMap(docToSave -> bucket.async().upsert(docToSave))
//this will perform the above asynchronously but wait for the last doc in the batch to finish saving:
.toBlocking().last();
Обратите внимание, что мы используем KEY_PREFIX
при создании сохраняемого документа, чтобы снизить риск коллизии (в противном случае другим документам в корзине может быть присвоено имя «1», если вы сделаете это для нескольких типов документов в одной корзине).
Также настройте метод сохранения, используемый в соответствии с вашими потребностями (здесь upsert
против create
против update
, TTL, требования к долговечности и т. д.).
person
Simon Baslé
schedule
30.03.2017