java - 批量插入时出现 TemporaryFailureException

标签 java couchbase batch-insert

我正在向 CouchBase 批量插入数据,并在几分钟后收到此异常:

com.couchbase.client.java.error.TemporaryFailureException at com.couchbase.client.java.CouchbaseAsyncBucket$13.call(CouchbaseAsyncBucket.java:445) at com.couchbase.client.java.CouchbaseAsyncBucket$13.call(CouchbaseAsyncBucket.java:426) at rx.internal.operators.OperatorMap$1.onNext(OperatorMap.java:54) at rx.observers.Subscribers$5.onNext(Subscribers.java:234) at rx.subjects.SubjectSubscriptionManager$SubjectObserver.onNext(SubjectSubscriptionManager.java:222) at rx.subjects.AsyncSubject.onCompleted(AsyncSubject.java:101) at com.couchbase.client.core.endpoint.AbstractGenericHandler$1.call(AbstractGenericHandler.java:265) at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

这是代码:

    cluster = CouchbaseCluster.create();
    Bucket bucket = cluster.openBucket();

    int numBatchs = 10000;
    int numDocsInBatch = 1000;

    for (int j = 0; j < numBatchs; j++) {
        long start = System.currentTimeMillis();

        List<JsonDocument> documents = new ArrayList<>(numDocsInBatch);
        for (int i = 0; i < numDocsInBatch; i++) {
            String uniqueID = UUID.randomUUID().toString() + "_" + System.currentTimeMillis();

            JsonObject user = JsonObject.
                    empty();

            documents.add(JsonDocument.create(uniqueID, user));
        }

        Observable
                .from(documents)
                .flatMap(new Func1<JsonDocument, Observable<JsonDocument>>() {
                    @Override
                    public Observable<JsonDocument> call(final JsonDocument docToInsert) {
                        return bucket.async().insert(docToInsert);
                    }
                })
                .last()
                .toBlocking()
                .single();

我做错了什么吗?

最佳答案

TemporaryFailureException 通常是因为服务器太忙而引起的,通常可以通过退避重试该操作。

引用:http://developer.couchbase.com/documentation/server/4.0/sdks/java-2.2/documents-bulk.html

关于java - 批量插入时出现 TemporaryFailureException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34791783/

相关文章:

node.js - 如何使用 CAS 替换 couchbase 文档 - couchbase node js 2.0

java - 在 mac os 上从源代码编译 Hadoop Native 库

node.js - nodejs 新手,我怎么知道 couchbase 库与哪个版本的 nodejs 兼容?

java - 自定义 Gradle 任务类使用哪种语言?

node.js - 如何在 N1QL 和 Couchbase 中创建索引并使用 join

java - 按顺序批量插入到多个表中

python - 实现批量插入以提高性能

java - 使用 REST 优化 Neo4j 中的大量批量插入

java - SURF 和 SIFT 算法在 OpenCV 3.0 Java 中不起作用

java - 如何在@Transactional注释方法中将状态提交到数据库?