繁体   English   中英

如何基于Spring Data Couchbase中的密钥获取批量文档/多次获取

[英]How to get bulk documents/multi gets based on keys in spring data couchbase

我一直在尝试根据ID列表获取批量文件。 但是由于某些原因,我没有在CRUD Repo中看到可以提供该数据的方法。 我能够找到一个名为“ FindAll(List)”的方法,但这似乎仅在名为“ all”的视图上起作用,并且我不想为简单的查找引入视图(主要应该是一个功能)沙发底座)。

如果我不想最终使用“视图”或“镍查询”,有人可以让我知道实现最终目标所需要的所有选择。

另外,为什么Spring Data Couchbase不支持它。 这是意料之外的事吗?

Repository需要能够findAll()要执行保存任务的findAll()文档。 问题是,在Couchbase中,您可以将各种文档保存在同一存储桶中,因此存储库需要一种仅隔离与其实体类型匹配的文档的方法。

通过将View的CRUD操作和生成的N1QL查询的要求完成,方法是将_class字段上的条件附加到WHERE子句中。

当您提供密钥List时,Couchbase存储库会简单地重用您必须配置的视图,以便findAll()起作用,这还有确保密钥与正确的实体(即,未由视图索引)相对应的其他好处。 )将被忽略。

话虽如此,我认为删除视图要求已在路线图上……(但这取决于Couchbase团队。也许会提出一个问题以获得更明确的答案)。

Spring Data Kay及其对响应式编程的支持很可能也会改变现状。

根据文档 ,使用RxJava可以使用有效的批处理。

代码示例

bucket.async()
        .query(N1qlQuery.simple("SELECT meta().id as id FROM bucket"))
        .doOnNext(res -> res.info().map(N1qlMetrics::elapsedTime).
         forEach(t -> System.out.println("time elapsed"+t)))
        .flatMap(AsyncN1qlQueryResult::rows)
        .flatMap(row -> 
        bucket.async().
        get(row.value().getString("id")))
        .map(JsonDocument::content).
        toList()
        .toBlocking()
        .single();

RxJava是异步的,将节省额外的往返次数,并且最终将获得更好的性能!

暂无
暂无

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

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