如何与另一个Python应用程序共享Django数据库?

时间:2017-03-09 22:01:42

标签: python django websocket

在二级应用程序中导入我的Django应用程序的模型并查询数据库是一个好习惯吗?它有任何性能问题吗? 实际上第二个应用程序是一个简单的轻量级websocket服务器。

2 个答案:

答案 0 :(得分:1)

我已经回答了,虽然Programmers SE.

可能会更好

Tl;博士:不,这不是好习惯,但并不一定会导致性能问题。它确实使一切变得更加复杂。如果可以,请避免使用它。我有一个系统可以做到这一点,我正试图摆脱这种设置。

现在首先,正如Apero在评论中所说:

  

Django模型只能由Django应用程序使用。您的websocket服务很可能不是用Django编写的,因此您将无法使用这些模型

但我可以提供一些背景和实用性:

拥有多个系统或应用程序不会必然导致性能问题,而不仅仅是拥有多个应用程序实例,具体取决于下面的警告。

您的主要问题是系统是否可以打开和维护连接和查询,以及您是否有任何特别长时间运行或密集的查询,以及这些不同系统之间的重叠。您是否容易看到它?

我们有一个中等规模的遗留系统CRM数据库(250个用户,平均每天3页/秒,大约30Gb的数据,在MySQL中),具有:

  • 8位网络工作者
  • 访问数据库的Django框架管理命令中的30多个cronjobs(因此创建自己与数据库的连接),有些频率与每分钟一样频繁。
  • 4或5'独立'系统(报告工具,包括超集等,再次创建自己的连接。

我们在Amazon Web Services上的T2 Micro实例上运行所有这些操作。除非我们正在运行大规模的批处理作业(将250k记录插入到我们的110米行分析表中,设计设计不合理且没有正确编制索引,但这是另一个故事),否则它从未真正特别征税。这会在一夜之间发生,因为它往往会减慢一切。

但您询问了最佳做法

This answer is a good overview of some of the pitfalls

在我上面描述的示例中,我们有许多数据库在更新方面重叠的区域。这很糟糕,并且很难调试发生的事情。金融系统或CRM改变了这一记录吗?

从广义上讲,其他(非CRM)应用程序正在运行报告系统 - 所以只有SELECT语句才能有效。考虑到这一点,我到达时的第一件事就是为报告系统安装​​了一个读取副本,并将它们转移到那里。现在,即使有人在我们最大的表中运行文本关键字搜索,它也不会影响主CRM系统在更新客户记录和其他INSERTUPDATE查询方面的性能。

答案 1 :(得分:0)

如果来自两个应用的流量超载数据库但是这是一个可解决的问题,则可能会遇到数据库性能问题