簡體   English   中英

使用前綴和分隔符列出 S3 存儲桶的性能

[英]Performance of listing S3 bucket with prefix and delimiter

根據列表文檔,可以將大量導航鍵視為分層的。 我計划存儲大量密鑰(比如幾億個),分布在合理大小的“層次結構”上。

使用前綴和分隔符的性能如何? 它是否需要在 S3 端完整枚舉鍵,因此是 O(n) 操作? 我不知道鍵是否存儲在大哈希表中,或者它們是否具有索引數據結構,或者它們是否存儲在樹中或什么。

我想避免我有大量鍵並且在“層次結構”中導航突然變得困難的情況。

所以如果我有以下鍵:

  • abc/def/ghi/0
  • abc/def/ghi/1
  • abc/def/ghi/...
  • abc/def/ghi/100,000,000,000

它會影響查詢Delimiter='/, Prefix='abc/def'嗎?

除了 Sandeep 引用的請求率和性能注意事項文檔(不適用於您的用例)之外,AWS 還沒有過多地宣傳 S3 性能。 這可能是私有知識產權。 所以我懷疑你會找到很多信息,除非你能以某種方式直接從 AWS 獲得它。

但是,請記住以下幾點:

  1. Amazon S3 專為大規模構建。 數以百萬計的公司正在使用 S3 和數百萬個存儲桶中的數百萬個密鑰。
  2. AWS 將前綴 + 分隔符提升為一個非常有效的用例。
  3. AWS 可能在幕后使用計算機科學中使用的常見數據結構和算法來有效地檢索密鑰。 一種這樣的數據結構稱為特里樹或前綴樹。

基於上述所有內容,當您檢索鍵列表時,它可能比 O(n) 階算法要好得多。 我認為您可以安全地為層次結構使用前綴和分隔符。

只要您沒有在前綴中使用連續序列(例如日期 2016-13-08、2016-13-09 等),您就不會遇到任何問題。 如果您的密鑰是作為連續序列自動生成的,則在密鑰之前添加一個隨機生成的哈希密鑰 (aidk-2016-13-08, ujlk-2016-13-09)。 亞馬遜文檔說:

Amazon S3 維護每個 AWS 區域中對象鍵名稱的索引。 對象鍵以 UTF-8 二進制順序存儲在索引中的多個分區中。 鍵名稱決定了鍵存儲在哪個分區中。 使用順序前綴(例如時間戳或字母順序)會增加 Amazon S3 將大量鍵定位到特定分區的可能性,從而使 I/O 容量不堪重負的分區。 如果在鍵名前綴中引入一些隨機性,鍵名以及 I/O 負載將分布在多個分區中。

http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-thinkations.html

Amazon 表示前綴命名策略(例如隨機散列)不再影響 S3 查找性能。

https://docs.aws.amazon.com/AmazonS3/latest/dev/optimizing-performance.html

暫無
暫無

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

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