2011-12-29 119 views
14

可能重複:
Notification of new S3 objects用戶上傳到S3存儲桶時會收到通知嗎?

我們已經找到存儲在S3上的用戶數據的應用程序。處理上傳的應用程序部分與處理數據的部分分離。在某些情況下,用戶可以直接將數據上傳到S3,而無需通過我們的應用程序(如果他們擁有自己的S3帳戶並向我們提供憑據,則可能會發生這種情況)。

是否有可能得到通知每當S3存儲的內容發生變化?這將是很酷,如果不知何故消息可能會發送說,「這個文件被添加/更新/刪除:富」。

簡短的是,有一些地方戳我可以輪詢會告訴上次桶被更新?

如果我不能做任何的這些東西,那麼唯一的選擇是抓取整個桶和尋找變化。這將是緩慢和昂貴的。

回答

17

更新2014-11:

正如艾倫解毒,阿莫西林在評論中指出,AWS現在支持從S3到SNS通知,這是可以自動轉發到SQS:http://aws.amazon.com/blogs/aws/s3-event-notification/

S3也可以發送通知AWS Lambda直接運行您自己的代碼。

該預測S3-> SNS通知原始響應:

如果亞馬遜支持這一點,他們會使用SNS來發送一個對象已被添加到一個桶通知。然而,此刻,通過S3和SNS支持的唯一斗事件時通知您的Amazon S3檢測到它已經失去了精簡冗餘存儲(RRS)對象的所有副本,並可以爲對象不再服務請求。

這裏是由S3支持的SNS事件的文檔:

http://docs.amazonwebservices.com/AmazonS3/latest/dev/NotificationHowTo.html

根據該文件寫入的方式,它看起來像亞馬遜擁有其他通知事件添加的想法(也許你想知道何時添加新的密鑰)。

由於它不是由亞馬遜S3的客戶端上傳對象S3將需要觸發通知,或者你需要做一些投票站的直接支持。

上傳到S3的自定義事件通知可以使用SNS完成,如果您希望獲得近乎實時的處理更新,或者可以通過SQS完成,如果您想讓通知堆積並處理它們按自己的步調排隊。

如果你是輪詢,可以減少你需要具有的,比如說一個前綴,客戶端上傳請求鍵的數量「未處理/ ......」後面的唯一關鍵。您的輪詢軟件可以查詢以該前綴開頭的S3密鑰。當它準備好處理時,它可以將密鑰更改爲「處理/ ...」,然後再更改爲「處理/ ...」或其他。 S3中的對象目前通過S3執行的複製+刪除操作進行重命名。

+0

對於體積較小的對象,名稱的前綴將正常工作。對於大量的物體,這實際上會減慢S3。 S3根據存儲桶名稱/對象密鑰對數據進行內部分區,而具有相同前綴的密鑰很可能最終位於同一分區中。要獲得較高的上傳吞吐量,您需要在字符串的開始處更改對象鍵。有關詳細信息,請參閱以下內容:http://aws.typepad.com/aws/2012/03/amazon-s3-performance-tips-tricks-seattle-hiring-event.html – dlaidlaw 2013-05-16 14:08:20

+0

@dlaidlaw:正如亞馬遜描述的那樣,它很容易即使沒有特殊的密鑰前綴分配,也可以處理每秒超過100個請求的突發。如果您比以前更快地處理入站隊列,則可以簡單地使用「未處理」存儲區而不是前綴。但是,以這種速度,你很可能會使用並行處理器,在這一點上,有一個被輪詢的單個未處理文件列表的建議被破壞了(你怎麼知道哪個線程正在處理哪個文件?)。 – 2013-05-17 01:28:32

+4

對於吞吐量非常高的情況,我在S3中向包含該文件URI的SQS寫入消息。然後多個線程可以處理SQS隊列。是的,在編寫SQS消息時會有開銷,但它是必需的,並分佈在所有線程發送文件到S3。它會好得多,如果亞馬遜有一個標誌派在S3,然後你可以訂閱的SQS隊列分發跨線程負載創建一個SNS的消息,但在那之前,你必須寫自己的消息要麼SNS或SQS。 – dlaidlaw 2013-06-03 15:47:42

相關問題