我在这个网站上读到了Couchbase的文章,发现了它。我理解高水平的索引,但仅此而已。第二行同样难以理解。
The primary index, like every other index in Couchbase, is maintained asynchronously. You set the recency of the data by setting the consistency level for your query
这意味着当文档存储在Couchbase中时,它会被放入队列中进行索引。写入操作不等待索引完成。想象一下,您的应用程序:
- 写入一些文档A,如
{'type': 'invoice', 'foo':'bar', ... etc ... }
-
立即执行N1QL查询
SELECT * FROM mybucket WHERE type = 'invoice'
一个过于简单的解释:文档A将在步骤1之后排队进行索引。在步骤2中,N1QL为NotBounded(默认情况下,SDK/服务器将为NotBouned),可能不会返回文档A,因为它还没有被索引。如果您的情况需要,您可以指定RequestPlus(或AtPlus)而不是NotBounded。这将使您的查询在执行查询之前等待索引完成。
C#中使用RequestPlus:的一个例子
var request = QueryRequest.Create("SELECT * FROM mybucket WHERE type = 'invoice'");
request.ScanConsistency(ScanConsistency.RequestPlus);
不过,这确实会影响性能!RequestPlus将是最差的性能,NonBounded将是最好的,AtPlus将在在中间。
请注意,如果您使用键/值访问而不是N1QL,那么您就不必担心这一点。无论索引如何,您都可以通过文档的键直接访问文档。
更多信息:
- 请求规范(文档)
- 关于AtPlus的博客文章