2016-11-24 16 views
0

我正在開發中,大多數的搜索是基於地理空間數據(定座標最近的記錄)和日期範圍一個全球應用。選擇正確的PartitionKey一個基於日期的全球DocumentDB應用

所以,基本上是有可能像製作的Airbnb,預訂應用的主要搜索等

其中分區鍵我應該在DocumentDB分區收集考慮到這些情況下選擇?

謝謝!

更新:就像我告訴Matias(見答案),我和我的朋友,我們正在考慮像國家這樣的東西。 該應用程序是關於搜索。另一件重要的事情是我們有日期。日期噸。 因爲我們是DDB的新手,所以我們的問題是:「如果我們選擇國家作爲分區鍵並且我們的查詢必須在不同國家內搜索,會發生什麼情況?」。即靠近國家邊界的地理搜索。

+1

您能提供一些額外的上下文嗎?什麼是你的模式,你的查詢通常是針對預訂,財產或用戶(例如),準備好的還是寫入繁重的等等。關於分區的一個很好的解讀是[Azure DocumentDB中的分區和擴展](https: //docs.microsoft.com/en-us/azure/documentdb/documentdb-partition-data)。 –

+0

嗨丹尼,我已經更新了這個問題,謝謝:) – Sandrous

回答

2

不知道多一點很難說,但我會從這些官方分區指南開始:Partitioning and scaling,特別是關於Designing的部分。

要點應該是吞吐量分佈(你不想要「熱點」)和事務原子性可能。請記住,當您發出查詢時,它可以跨越多個分區,並且DDB將均勻分配吞吐量(您可以通過EnableCrossPartitionQuery選項使用此功能)。

那麼,真正確定哪個最好的分區鍵真的取決於你的數據如何分佈以及你的查詢是如何構建的。

由於該應用程序是全球範圍內,也許最好的分區方法是按國家/大陸/地區(其中之一)進行劃分,但它確實取決於數據量,應該均勻分佈以避免出現真正的熱點分區/區。

最後,您還可以檢查Performance and scale test exampleDocumentDB performance tips以改善性能。

+0

謝謝Matias。我知道我沒有提供很多信息,但這是因爲我正在考慮應用程序的架構設計。 我和我的朋友正在考慮一種空間方法,特別是我們正在考慮像國家這樣的東西。 但我們是DDB的新手,我們的問題是:「當查詢必須在不同國家搜索時會發生什麼?」。即靠近國家邊界的地理搜索。 – Sandrous

4

像Matias提到的那樣,一些更多的信息將幫助我們提供更好的建議。我爲下面的分區鍵選擇添加了一些想法/選項:

  • 使用通用分區鍵,如用戶ID或產品ID。在此模型中,您的地理空間查詢將跨分區執行,但由於DocumentDB本地在分區內建立空間索引,因此可能會滿足您的性能需求。
  • 根據位置的GeoHash使用分區方案。這將確保類似位置的數據點將被放置在相同的分區上。這將需要在你的應用中的一些額外的工作加上「地理散列> ABCDEF和地理散列< abcfff」條款基於像國家屬性查詢執行縮小到幾個分區
  • 分區,如果大多數查詢落在一個國家。需要跨越國家的罕見查詢也會表現良好(儘管不像查詢單個分區/國家時的延遲低),因爲它們可以使用每個分區內的本地索引。您可能需要分別處理特殊情況。例如,如果美國有> 30-40%的數據,則可能需要選擇混合方法,其中美國數據使用州作爲分區鍵,而數據較少的國家則使用該國作爲分區鍵。國家+日/月/年的組合鍵也可能取決於數據分佈。
  • 如果您的查詢在時間範圍內均勻分佈,則可以考慮使用日期作爲分區鍵。但對於大多數應用程序來說,由於最近的數據更頻繁地被訪問,所以這不是一個好的選擇。
+0

嗨Aravind,謝謝你的回答。 關鍵是,該應用程序是關於Geoposition和日期。我們正在考慮國家或時間範圍之類的東西,但我們沒有明確的時間範圍,因爲查詢可能會要求「任何」日期範圍。 我已經更新了這個問題,我也評論了Matias的回答。 – Sandrous

+0

謝謝 - 編輯我的答案與國家爲基礎的方法內聯。 –

0

如果您使用分區是因爲您有大量數據,但希望查詢僅基於地理空間標準返回一個或幾個記錄,那麼像國家這樣的東西可能會起作用,因爲它會切除大量不相關的內容數據立即和分區內的索引將允許快速找到所需的文檔。這可能會導致不規則的分區大小 - 想象一下如果俄羅斯和中國最終進入同一個分區。

但是,如果您的查詢將返回大量基於地理空間標準的文檔,並且您希望提取所有這些記錄或對其應用進一步的過濾或其他功能,那麼您將希望將該處理擴展爲儘可能多的分區。在這種情況下,您需要一個將數據均勻分佈在分區上的分區鍵。如果您希望查詢將多個文檔類型組合爲相同的座標,用戶標識或站點標識等,那麼最好有一個基於該值的關鍵字,以便所有相關文檔可以在同一個分區內一起處理。

在實際應用中,我發現使用遞增值作爲分區鍵是最好的通用解決方案,因爲它允許在所有分區上均勻處理查詢。

相關問題