在两个Django项目之间共享模型(和表)

时间:2012-09-27 16:00:13

标签: database django model celery

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

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

http://i.imgur.com/kOdeq.png

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

这种设计在两个ORM的同步方面会有什么样的警告? 这甚至是个好主意吗?

1 个答案:

答案 0 :(得分:1)

换句话说,你是在重新发明任务队列吗?

也就是说,界面只是插入代表“为我做这个”的记录,然后从“为你完成这个”表(或同一个表,无关紧要)中检索结果?

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

我仍然建议重新评估芹菜 - 我已经多次把它关掉了,但是现在我已经把它设置好让我感到震惊,我之前没有使用它。你甚至可以使用Django DB作为消息队列后端(虽然我只是说对低容量站点这样做)。

无论如何,关于具体问题:

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

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

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

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