2014-07-07 96 views
4

我正在構建一個Django應用程序。該應用程序允許用戶上傳文件,並將其公開地提供給其他用戶。用於將s3/cloudfront與數據庫同步的體系結構

我正在考慮使用S3或CloudFront來管理和提供這些文件。 (爲了討論起見,我們將其稱爲S3)。讓我感到困擾的是S3將會在其上有很多狀態。我的Python代碼將根據用戶操作在S3上創建,重命名和刪除文件。但是我們已經擁有了數據庫中的所有狀態。在兩個單獨的數據存儲中存在狀態可能會導致同步問題和混淆。換句話說,它「不應該」不同步。例如,如果有人從django管理員中刪除數據庫中的記錄,s3上的文件將保持孤立。 (我可以編寫代碼來處理這種情況,但我無法捕捉到所有場景。)

所以我在想什麼:是否有一種解決方案讓您的S3與您的Postgres數據庫中的數據自動同步? (我將這些文件存儲爲數據庫中的blob沒有問題,只要它們不直接從那裏提供,它們就不是那麼大)。我說的是讓一個活躍的程序始終保持它們之間的同步,所以如果有人刪除數據庫中的記錄,s3中的相應文件被刪除,並且如果有人從S3接口刪除文件,它將從數據庫重新創建。這樣我的頭腦可以放心地解決同步問題。

有沒有這樣的事情?最好在Python中。

回答

0

在過去發現了同樣的問題,也許不是最好的建議,但這是我做的。

我編寫了上傳/修改/刪除模型中的S3邏輯,並使用Model signals來更新它,例如您可以使用post_delete信號從S3中刪除圖像並避免孤兒。

另外我有一個管理命令,檢查是否一切都是同步的,並解決問題,如果有的話。不幸的是,我爲客戶寫了這篇文章,我無法分享它。

編輯:我發現django-cb-storage-s3django-s3sync他們可幫助

+0

我看着你的兩個包。第一個看起來像是用於靜態而不是媒體文件(儘管它的名字是這樣),並且它沒有以任何方式更新,第二個看起來被放棄了。你在答案中提出的解決方案可能會有效......但我仍然希望能夠使用一個軟件包。 –