用于将s3 / cloudfront与数据库同步的体系结构

时间:2014-07-07 21:41:44

标签: python django amazon-s3 sync amazon-cloudfront

我正在构建一个Django应用。该应用允许用户上传文件,并将其公开提供给其他用户。

我正在考虑使用S3或CloudFront来管理和提供这些文件。 (为了讨论起见,我们称之为S3。)让我感到困惑的是S3将会有很多状态。我的Python代码将根据用户操作在S3上创建,重命名和删除文件。但是我们已经拥有了数据库中的所有状态。在两个单独的数据存储中使用状态可能会导致同步问题和混乱。换句话说,它不应该"不同步。例如,如果有人要从django admin中删除数据库中的记录,则s3上的文件将保持孤立状态。 (我可以编写代码来处理这种情况,但我无法捕捉到所有情况。)

所以我想的是:是否有一个解决方案让您的S3自动与Postgres数据库中的数据同步? (我将文件作为blob存储在数据库中没有问题,它们并不大,只要它们不是直接从那里提供的。)我在谈论拥有一个始终有效的程序维护它们之间的同步,所以如果有人删除数据库中的记录,s3中的相应文件将被删除,如果有人从S3界面删除文件,它将从数据库中重新创建。这样我的思绪可以在同步问题上放心。

有类似的东西吗?最好是在Python中。

1 个答案:

答案 0 :(得分:0)

过去发现同样的问题,也许不是最好的建议,但这就是我所做的。

我在模型中写了上传/修改/删除S3逻辑并使用{​​{3}}来保持更新,例如你可以使用post_delete信号从S3删除图像并避免孤儿。

此外,我还有一个管理命令来检查是否所有内容都已同步并解决了问题。不幸的是我为客户写了这个,我无法分享。

修改:我发现Model signalsdjango-cb-storage-s3可能会有所帮助