[英]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_PLUS
的ScanConsistency
执行查询,在此执行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.