我正在考慮將S3用於後端持久存儲。亞馬遜S3的GET對象和PUT對象命令在高對象數下減慢了嗎?
但是,根據架構選擇,我預測一些存儲桶可能需要存儲數十億個小物件。
GET Object和PUT Object如何在這些條件下執行,假設我使用UUID作爲鍵?我可以期望O(1),O(logN)或O(n)的表現嗎?
我是否需要重新考慮我的架構,並以某種方式細分更大的桶以維持性能?我特別需要對象查找(GET)以儘可能快。
我正在考慮將S3用於後端持久存儲。亞馬遜S3的GET對象和PUT對象命令在高對象數下減慢了嗎?
但是,根據架構選擇,我預測一些存儲桶可能需要存儲數十億個小物件。
GET Object和PUT Object如何在這些條件下執行,假設我使用UUID作爲鍵?我可以期望O(1),O(logN)或O(n)的表現嗎?
我是否需要重新考慮我的架構,並以某種方式細分更大的桶以維持性能?我特別需要對象查找(GET)以儘可能快。
雖然它可能意味着S3客戶提供真正的離譜的請求量,亞馬遜確實有如何充分利用S3的一些小技巧,基於S3的內部結構:
執行PUT操作通過按鍵名字以字母數字順序遞增的順序針對特定存儲桶可以減少每個單獨通話的總響應時間。以任何排序順序執行GET可能會產生類似的效果。對象越小,這可能會影響整體吞吐量。
從單個客戶端執行多個請求時,使用多線程來啓用併發請求執行。
考慮使用一小組字符在哈希前面加上密鑰。十進制哈希很好地工作。
考慮使用以不同字母數字字符開頭的多個桶。這將確保從一開始就進行一定程度的分區。併發PUT和GET請求的數量越高,這可能會產生越大的影響。
如果您將從Amazon EC2實例中針對Amazon S3發出GET請求,您還可以通過在Amazon EC2中爲這些對象執行PUT以將這些呼叫的網絡延遲降至最低。
下面是AWS是進入有關哈希前綴戰略深度而當它是沒有必要解釋了一大篇:
http://aws.typepad.com/aws/2012/03/amazon-s3-performance-tips-tricks-seattle-hiring-event.html
底線:您計劃將數十億物體放入使用UUID爲鍵的單桶應該沒問題。如果您的請求量非常大,則可以將其分割爲多個具有不同主角的分區,以便實現更好的分區。
如果您打算花費大量資金與AWS,請考慮與亞馬遜聯繫並與他們溝通方法。
S3就像一個外部磁盤。所以就像讀/寫GET或PUT一樣,將取決於文件對象的大小,而不管磁盤中其他文件的數量。 從FAQ page:
由於亞馬遜S3是高度可擴展的,你只需要支付你用什麼, 開發人員可以從小處着手,並與性能或可靠性不妥協發展自己的應用程序,因爲他們希望, 。它被設計爲高度靈活的 :存儲您想要的任何類型和數量的數據;讀取 同一片數據100萬次或僅用於緊急災難 恢復;構建一個簡單的FTP應用程序或諸如Amazon.com零售網站等複雜的Web應用程序。 Amazon S3免費開發人員專注於創新,而不是解決如何存儲他們的 數據。
如果您想知道S3文件系統中文件查找的時間複雜度,很難說,因爲我不知道它是如何做到的。但至少比O(n)好。 O(1)如果使用散列或O(logn)如果樹。但是要麼是非常可擴展的。
底線是不用擔心。
您的文章不僅可以回答我的問題,而且您鏈接的文章可以讓您深入瞭解S3如何在幕後工作。謝謝!在研究MongoDB時,我曾閱讀過關於「熱 - 冷」鍵盤映射分區的問題,這是我選擇使用UUID作爲鍵的一個原因。我不期望S3上的併發性很高,因爲我的體系結構將在會話啓動和超時時使用GET和PUT。會話內數據的更改將在EC2的RAM上使用Erlang/OTP進行處理。所以看起來我很好! – nerophon