【问题标题】:Sharing models (and tables) between two Django projects在两个 Django 项目之间共享模型(和表)
【发布时间】:2012-09-19 11:31:24
【问题描述】:

我想通过复制模型将主要 django 项目的繁重流程分担到另一个 django 项目。

这意味着共享数据库表。这是一个图表来解释表是如何共享的:按照编号的箭头来看看我想象的信息流。

INTERFACE 项目是拼图的用户交互部分,它处理输入和输出并定义用户希望解决的问题。 SOLVE 项目解决了繁重的用户定义问题,准备就绪后,将解决方案作为记录放入 INTERFACE 可以读取的自己的表中,并将 INTERFACE 呈现给用户。

这种设计在两个 ORM 同步方面有哪些注意事项? 这是个好主意吗?

【问题讨论】:

    标签: database django model celery


    【解决方案1】:

    换句话说,您是在重新发明一个任务队列?

    也就是说,接口只是插入代表“为我做这个”的记录,然后从“为你做这个”表(或同一个表,没关系)中检索结果?

    您真正需要的是某种远程异步 rpc 调用接口,是的,如果您愿意,您可以以这种方式重建。

    我仍然建议重新评估芹菜 - 我已经多次推迟了它,但现在我已经设置了它,这让我很震惊,我之前没有使用它。您甚至可以将 Django DB 用作消息队列后端(尽管我只会说对低容量站点这样做)。

    不管怎样,至于具体的问题:

    两个独立进程使用相同的数据库表不存在继承问题,Django 和您的数据库连接器都不会在这方面添加额外的约束。

    您将需要您的工作进程(“解决”)定期轮询数据库以查找要执行的任务,或向其发送消息(提示:芹菜!)。您的 ui 客户端(“界面”)可以在用户刷新时检查数据库。

    从实现的角度来看,在两个项目之间完全共享代码(所有模型、视图等)可能是最简单的。您将有一个进程以正常方式启动 ui Web 服务器,对于工作人员来说,连接自定义管理命令可能是启动工作人员循环的最简单方法。

    如果您在打算写入行时不使用select_for_update,您“可能”会遇到数据库锁定/竞争条件的一些问题。或者,您可以使用.save(update_fields=zzz) 来避免争用,但这仅在 1.5 中。

    【讨论】:

    • 我真的没想到 django-db 可以用作队列。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 2016-06-15
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多