【发布时间】:2016-03-02 03:25:12
【问题描述】:
我有一个包含大约 2500 万个文档的 Couchbase 集群。我能够按顺序阅读它们,而且我有一个可以从数据库中读取特定数量文档的功能。但是我的用例略有不同,因为我无法将所有 25M 文档(每个文档都很大)存储在内存中。
我需要分批处理文档,比如 1M/batch,将该批次推送到我的内存中,(对这些文档进行一些操作)并推送下一批。
我为读取特定数量的文档而编写的函数并不能确保它在再次调用时返回一组不同的文档。
有什么方法可以让我完成这个功能吗?我还有一个可以批量创建文档的功能。我不确定我是否可以编写一个可以批量读取文档的类似函数。函数如下。
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++);
}
有人可以帮我解决这个问题吗?
【问题讨论】:
-
您的问题是关于批量阅读文档的问题,并且您已经发布了编写文档的代码。您要更新的 rx 代码看起来不错。如何发布您尝试批量加载的内容。
-
问题是我不知道如何从服务器获取文档。
just功能需要按键吗?我无权访问密钥。所以我无法编写类似的函数来读取文档。 -
你不知道钥匙?忽略批处理,你打算如何指定你需要的文件。意见? N1QL?那些合适吗?你没有在问题中指定。我认为您可能应该更新问题以正确解释您的问题。
-
我什至没有将 25M+ 密钥存储在应用层中。所以我只能选择使用
limit和skip函数来使用视图。在发布这个问题时,我打算使用 rx 代码获取文档。