2012-09-27 114 views
0

我想通过复制模型将主django项目的繁重过程分享给另一个django项目。在两个Django项目之间共享模型(和表)

这意味着共享数据库表。下面是一张图表,用于解释如何共享表格:按照编号的箭头查看我如何想象信息的流向。

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

而接口项目是拼图的用户交互部分,它处理输入和输出,并定义一个用户想什么问题都解决了。 SOLVE项目解决了严重的用户定义问题,准备就绪后,将解决方案作为记录放置在INTERFACE可以读取的自己的表格中,并将界面呈现给用户。

这种设计有两种ORM同步方面的警告吗? 这是一个好主意吗?

回答

1

换句话说,你正在重新创建一个任务队列?

也就是说,接口只是插入代表“为我做这件事”的记录,并且稍后从“为您完成”表格(或同一张表格,无所谓)中检索结果?

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

我仍然会推荐重新评估芹菜 - 我已经把它关闭了好几次,但现在我已经把它设置了让我感到震惊,我之前没有使用它。你甚至可以使用Django数据库作为消息队列后端(尽管我只是说为低容量网站做这件事)。

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

有两个独立的过程中使用相同的数据库表既不Django的也不是你的数据库连接器将在这方面增加额外的限制没有继承的问题。

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

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

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

+0

它真的让我误以为django-db可以作为队列使用。谢谢! – sdkfasldf

相关问题