2014-07-07 58 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

我看着你的两个包。第一个看起来像是用于静态而不是媒体文件(尽管它的名字是这样),并且它没有以任何方式更新,第二个看起来被放弃了。你在答案中提出的解决方案可能会有效......但我仍然希望能够使用一个软件包。 –