簡體   English   中英

Azure CosmosDB如何針對物理分區進行查詢

[英]Azure CosmosDB how to query against a physical partition

我正在嘗試執行一個非常大的查詢,該查詢需要返回數百萬條記錄,因此我想對查詢進行分區並使用多台計算機來處理結果。

我的邏輯分區鍵將是文檔的UUID,因此對我將不同的部分分配給每個工作程序節點不會有太大幫助。 我可以獲取物理分區ID並僅在特定物理分區內執行查詢嗎?

這是我嘗試過的:

FeedOptions feedOptions = new FeedOptions();
feedOptions.setEnableCrossPartitionQuery(false);
feedOptions.setPartitionKeyRangeIdInternal("0");

client.queryDocuments(collectionPath, "SELECT * FROM e where e.docType
= 'address'", feedOptions).flatMapIterable(FeedResponse::getResults);

但是更改partitionKeyRangeId似乎根本不會更改結果。

請指教。

據我所知,到目前為止,它不能在特定的物理分區內執行。 我在Cosmos DB Rest Api中找不到與物理分區有關的任何參數。 您在代碼中提到的PartitionKeyRangeId用於更改供稿請求。

根據官方文檔中的聲明,我們無法管理cosmos db中的物理分區:

Azure Cosmos DB將根據您的工作量自動擴展物理分區的數量。 因此,您不應基於物理分區的數量來核心化數據庫設計,而應確保選擇確定邏輯分區的正確分區鍵。

但是,由於cosmos db具有靈活性,可用性和啟發性,因此如果您確實有與物理分區相關的要求,則可以提交反饋以尋求進一步的幫助。

希望對您有幫助。


更新答案:

有很多方法可以提高處理大量數據的性能,在這里我只提供一些個人建議。

1.您可以嘗試考慮選擇比UUID更合適的分區鍵,以大大提高性能。

2.嘗試使用page size限制每個查詢的項目數,然后通過多線程實現查詢和進程並行性。

3.增加RUs設置以提高性能。

更多想法,請參考此文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM