繁体   English   中英

批量读取Couchbase存储桶中的文档

[英]Reading documents from the Couchbase bucket as batches

我有一个Couchbase集群,其中包含大约2500万个文档。 我能够顺序读取它们,并且我具有可以从数据库读取特定数量文档的功能。 但是我的用例略有不同,因为我无法将所有25M文档(每个文档都很大)存储在内存中。

我需要分批处理文档,例如1M /批,将该批文档推送到我的内存中(对那些文档进行一些操作),然后再推送下一批。

我编写的用于读取特定数量文档的函数不能确保再次调用该函数时它返回一组不同的文档。

有什么方法可以完成此功能? 我还有一个可以批量创建文档的功能。 我不确定是否可以编写类似的功能来批量读取文档。 功能如下。

public void createMultipleCustomerDocuments(String docId, Customer myCust, long numDocs) {

        Gson gson = new GsonBuilder().create();
        JsonObject content = JsonObject.fromJson(gson.toJson(myCust));
        JsonDocument document = JsonDocument.create(docId, content);
        jsonDocuments.add(document);
        documentCounter++;

        if (documentCounter == numDocs) {
            Observable.from(jsonDocuments).flatMap(new Func1<JsonDocument, Observable<JsonDocument>>() {
                public Observable<JsonDocument > call(final JsonDocument docToInsert) {
                    return (theBucket.async().upsert(docToInsert));
                }
            }).last().toBlocking().single();

            documentCounter = 0;
            //System.out.println("Batch counter: " + batchCounter++);

        }

有人可以帮我吗?

我将尝试创建一个包含所有文档的视图,然后使用跳过和限制查询该视图。 (可以使用.startKey()startKeyId()函数而不是skip()来避免开销。)

但是,请记住不要在生产环境中保留这种观点,这将是cpu hog。

另一个选择是,使用DCP协议将数据库复制到您的应用程序中。 但这是更多的工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM