如何在Azure Cosmos DB中選擇分區(qū)鍵?
我來答

如何在Azure Cosmos DB中選擇分區(qū)鍵?

楊林淘 2020-09-23 提問
559

在Azure Cosmos DB中選擇分區(qū)鍵的策略是什么?

關(guān)閉
提交回答
2 個回答
我來答
黃澤宗

管理邏輯分區(qū)

Azure CosmosDB以透明的方式自動管理邏輯分區(qū)在物理分區(qū)(物理服務(wù)器)上的位置,以滿足業(yè)務(wù)數(shù)據(jù)的橫向擴(kuò)展和可伸縮性,同時支持性能需求。

隨著應(yīng)用程序的吞吐量和存儲要求的提高,Azure Cosmos DB可移動邏輯分區(qū),以自動在更多的服務(wù)器之間分散負(fù)載。

Azure Cosmos DB使用基于哈希的分區(qū)在物理分區(qū)之間分散邏輯分區(qū)。Azure Cosmos DB對項(xiàng)的分區(qū)鍵值進(jìn)行哈希處理。哈希處理結(jié)果確定了物理分區(qū)。然后,Azure Cosmos DB在物理分區(qū)之間均勻分配分區(qū)鍵哈希的鍵空間。

與訪問多個分區(qū)的查詢相比,訪問單個分區(qū)中的數(shù)據(jù)的查詢更具成本效益。只允許針對單個邏輯分區(qū)中的項(xiàng)執(zhí)行事務(wù)(在存儲過程或觸發(fā)器中)

選擇分區(qū)

我們在使用Partition Key分區(qū)鍵時候,需要注意以下幾點(diǎn):

1.單個邏輯分區(qū)的存儲空間上限為10GB

2.對每個CosmosDB分區(qū)的最小吞吐量為每秒400個Request Unit(RU)。

假設(shè)我們對CosmosDB分區(qū)的RU設(shè)置為500,但是真實(shí)的Request吞吐量超過500,則請求將因?yàn)镽U不足而有限制。請務(wù)必選擇不會導(dǎo)致應(yīng)用程序中產(chǎn)生“熱點(diǎn)”的分區(qū)鍵

3.請合理選擇Azure CosmosDB的分區(qū)鍵,以保證數(shù)據(jù)平均的分布。平衡數(shù)據(jù)查詢和事務(wù)查詢,以實(shí)現(xiàn)橫向擴(kuò)展

4.我們在選擇分區(qū)鍵的時候,盡量保證該分區(qū)鍵可以被作為過濾條件,以提高查詢的效率。

避免在所有分區(qū)下查詢某一條數(shù)據(jù),因?yàn)闆]有定義分區(qū)鍵查詢效率會非常低下。

回答于 2020-09-23
贊同
評論
Hugo

我向你介紹下如何選擇適合你方案的分區(qū)鍵,以及怎么充分利用 Azure Cosmos DB 自動擴(kuò)展。

分區(qū)鍵是Azure將數(shù)據(jù)整理到邏輯分區(qū)所依據(jù)的值。分區(qū)鍵應(yīng)用于在整個數(shù)據(jù)庫中分發(fā)操作以避免熱分區(qū)。熱分區(qū)是比其他分區(qū)接收更多請求的單個分區(qū),可能會產(chǎn)生吞吐量瓶頸。

在我們的在線零售方案中,使用userID或productId值作為分區(qū)鍵是一個不錯的選擇,因?yàn)樗哂形ㄒ恍郧矣锌赡苡糜诓檎矣涗?。userID是不錯的選擇,因?yàn)閼?yīng)用程序經(jīng)常需要為用戶檢索個性化設(shè)置、購物車、訂單歷史記錄和個人資料信息(僅舉幾例)。productId也是不錯的選擇,因?yàn)閼?yīng)用程序需要查詢庫存水平、運(yùn)輸費(fèi)用、顏色選擇、倉庫位置等信息。

使用當(dāng)前時間不是一個好的分區(qū)鍵選擇,因?yàn)樗袀魅霐?shù)據(jù)都將歸入一個分區(qū)鍵。userID或productId會更好,因?yàn)檎军c(diǎn)上的所有用戶都可能以幾乎相同的頻率添加和更新購物車或個人資料信息,這會在所有用戶和產(chǎn)品分區(qū)上分發(fā)讀取和寫入操作。

容器的物理分區(qū)完全由Azure Cosmos DB管理,所需的物理分區(qū)數(shù)取決于所需的RU和存儲量。如果需要額外的物理分區(qū),Cosmos DB將通過拆分現(xiàn)有分區(qū)自動進(jìn)行創(chuàng)建。應(yīng)用程序沒有故障時間或性能影響。

與每個分區(qū)鍵關(guān)聯(lián)的數(shù)據(jù)的存儲空間不得超過20 GB,這是Azure Cosmos DB中一個物理分區(qū)的大小。因此,如果一個userID或productId記錄即將超過20 GB,請考慮改用組合鍵,以縮小每條記錄。組合鍵的一個示例是userID-date,如下所示:CustomerName-08072018。通過此組合鍵方法,可以為有用戶訪問該站點(diǎn)的每一天創(chuàng)建新分區(qū)。

最佳實(shí)踐

在嘗試確定合適的分區(qū)鍵時,如果解決方案不明顯,請注意以下幾點(diǎn)提示。

不要害怕選擇有大量值的分區(qū)鍵。分區(qū)鍵的值越多,可伸縮性就越大。

若要確定讀取密集型工作負(fù)荷的最佳分區(qū)鍵,請檢查打算使用的前三到五個查詢。WHERE子句中最常包含的值是分區(qū)鍵很好的候選項(xiàng)。

對于寫入密集型工作負(fù)載,需要了解工作負(fù)載的事務(wù)需求,因?yàn)榉謪^(qū)鍵是多文檔事務(wù)的作用域。

檢查:選擇分區(qū)鍵

對于每個Azure Cosmos DB容器,應(yīng)指定滿足以下核心屬性的分區(qū)鍵:

具有高基數(shù)。此選項(xiàng)允許在所有物理分區(qū)之間均勻分發(fā)數(shù)據(jù)。

均勻分發(fā)請求。請記住,RU/s的總數(shù)在所有物理分區(qū)之間平均分配。

均勻分發(fā)存儲。每個分區(qū)的大小可以增加到20 GB。

回答于 2020-09-23
贊同
評論
掃碼關(guān)注
獲取更多出海問答的相關(guān)信息
個人VIP
小程序
快出海小程序
公眾號
快出海公眾號
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家