繁体   English   中英

Couchbase存储桶插入行为与Java异步

[英]Couchbase bucket insert behaves asynchronously java

我正在使用插入的JsonDocument = bucket.insert(doc); 在benchbase-server-enterprise_4.1.0-ubuntu14.04_amd64上。

实际发生的是,我触发了该插入命令,并在此操作成功后触发了同一文档上的Select命令。 Select命令不返回更新条目,而是仅返回旧条目。 当我在Select之前使用调试器时( 插入后等待几秒钟,然后调用Select ),它完全可以正常工作。 所以我认为插入的行为是异步的,不确定。

我检查过的其他内容是upsert而不是insert ,它也不起作用。 但是,当我执行bucket.replace(doc)然后调用Select时 ,它将返回更新的结果。 我已经尝试显式地使用bucket.async()。insert(doc)并在其上使用toBlocking()。single() ,这也失败了。

插入/向上插入的问题,还是我做错了。

以下是我的一些代码片段::

@Override
public T save(T entity, String username) {

String id = generateId(entity);

JsonObject data = JsonObject.fromJson(getContent(entity));
data.removeKey(ID);
data.put(TYPE, klass.getSimpleName());
data.put(CREATED_AT, new Date().getTime());
data.put(CREATED_BY, username);
data.put(MODIFIED_AT, new Date().getTime());
data.put(MODIFIED_BY, username);
data.put(ACTIVE, true);

T persistedEntity = getEntity(bucket.insert(JsonDocument.create(id, data)));

return persistedEntity;

}

@Override
public List findAll() {
Statement query = selectAll().where(typeExpression()).orderBy(Sort.desc(x(CREATED_AT)));
return getEntities(query);
}

protected AsPath selectAll() {
return Select.select("meta().id, *").from(i(bucket.name()));
}

N1QL查询可以以不同程度的一致性运行,这与始终保持一致的键/值操作(您“读自己写”)不同。

因此,在插入和索引器追上它之间会有一点延迟。 如果默认执行N1QL查询,它将返回索引器的当前状态,因此,如果仍在索引文档,则不会看到更新。

尝试使用REQUEST_PLUSScanConsistency执行查询,在此执行bucket().query(...)

N1qlQuery n1qlQuery = N1qlQuery.simple(
    selectStatement, //that's the Statement query in your example
    N1qlParams
        .build()
        .consistency(ScanConsistency.REQUEST_PLUS)
);

这将指示N1QL等待索引器完成对未决突变的索引。

暂无
暂无

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

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