簡體   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