具有模型继承与替代方案的db性能

时间:2013-12-04 10:45:08

标签: django json performance join serialization

对于这个含糊不清的主题感到抱歉,但总结一下这是什么,有点难。所以请你忍受一下......

我正在开发一个高度模块化的应用程序 可扩展的(通过插件)。所以基本上你有模型 剥离到最低限度的数据和行为(通用集) 其余的可以通过插件进入。

例如:管理员通过管理员创建模型的实例。 有些只需要基础知识,但有些则需要特殊的行为 一些额外的数据,因此他添加了插件。

想到的是插件的模型继承。但既然如此 不可预见的安装将有多少插件和多少插件 特定的模型实例将附加到它或什么样的插件 (由于插件系统是异构的),性能非常好 我的担忧。

每次将模型用于网站的访问者时,每个插件都需要 得到评估。

因此,我想确保为一个带有1个查询的模型获取所有内容 而不是几个。这自然会导致很多连接, 实际上至少是O(N)(N是插件的数量 系统已安装特定型号)。仅这一点让我担心 关于这种系统的可扩展性和可行性。

因此,如果我的担忧合理,我想请求社区提供建议 如果这是一个合理的方法?顺便说一下,实施了我的 自己的解决方案,我遇到了来自的InheritanceManager django-model-utils,它现在用于向下转换部分 (如果重要的话)。

现在我也在考虑可能的替代品而不会失去 插件系统本身的灵活性(这是必要的):

而不是将每个插件保存到自己的表中,插件系统可以 设计为只使用一个表与所有常见的插件元 数据保存为列,其余数据被序列化为JSON并保存 在另一栏中。因此,人们可以很容易地获得所有插件 对于一个模型,只需要手动构建插件模型 序列化数据。这可以很好地与异质和 同质插件。自然地插件(和整个系统)失去了 在查询数据库的具体细节时有一些选择 一个插件的序列化数据。还有ACID约束 能够原子地增加单个字段。但那些限制 如果一个插件需要它,也可以克服(通过 例如,专用数据模型的手段。

同样,如果这是一个更具可扩展性的话,我会请求建议 与我上面的初始解决方案相比,或者如果是这样的话 那个问题很臭,应该不惜一切代价避免吗?

提前感谢任何帮助和提示。非常多 理解...

最后但并非最不重要的是,完全披露:我也将此问题发布到django-users列表中。我希望这没关系。

更新1

我意识到我从未明确表示我的应用程序基于Django 1.6,因此我的目标是尽可能地与数据库无关(不包括sqlite),即使我个人只使用PostgreSQL。

0 个答案:

没有答案