我想在 Java 中将文档作为批量插入到 Couchbase 中。那么在 java.. 中为每个文档生成密钥的标准程序是什么?
问问题
47 次
1 回答
0
您可以使用 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
在生成要保存的文档时使用 a,这样可以减少冲突的风险(否则,如果您对同一存储桶中的多种类型的文档执行此操作,则存储桶中的其他文档可能会被命名为“1”)。
还可以根据您的需要调整使用的保存方法(这里是upsert
vs create
vs update
,TTL,持久性要求等......)
于 2017-03-30T09:14:01.973 回答