【问题标题】:Architecture for syncing s3/cloudfront with database用于将 s3/cloudfront 与数据库同步的架构
【发布时间】:2014-08-28 12:18:15
【问题描述】:

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

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

所以我的想法是:有没有一种解决方案可以让您的 S3 与 Postgres 数据库中的数据自动同步? (我没有问题将文件作为 blob 存储在数据库中,它们并不大,只要它们不是直接从那里提供的。)我说的是有一个始终保持它们之间同步的活动程序,所以如果说某人删除了数据库中的一条记录,则 s3 中的相应文件将被删除,如果有人从 S3 界面删除一个文件,它将从数据库中重新创建。这样我就可以放心地处理同步问题了。

有类似的吗?最好使用 Python。

【问题讨论】:

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


    【解决方案1】:

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

    我在模型中编写了上传/修改/删除到 S3 的逻辑,并使用Model signals 保持更新,例如您可以使用post_delete 信号从 S3 中删除图像并避免孤儿。

    我还有一个管理命令来检查所有内容是否同步并解决问题(如果有)。不幸的是,我为客户写了这篇文章,我无法分享。

    编辑:我发现 django-cb-storage-s3django-s3sync 他们可能会有所帮助

    【讨论】:

    • 我看了你的两个包裹。第一个看起来像是用于静态文件而不是媒体文件(尽管它的名字)并且它没有以任何方式更新,而第二个看起来已经废弃了。您在回答中提出的解决方案可能有效......但我仍然希望有一个我可以使用的包。
    猜你喜欢
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多