Django 模型继承与备选方案的数据库性能

Django 模型继承与备选方案的数据库性能,django,json,performance,join,serialization,Django,Json,Performance,Join,Serialization,抱歉,这个神秘的主题,但总结一下这是怎么回事,有点难。所以请容忍我一会儿 我正在开发一个设计为高度模块化和 可扩展(通过插件)。所以基本上你有 精简到最低限度的数据和行为(通用集) 其余的可以通过插件进入 例如:管理员通过管理员创建模型的实例。 有些只需要基础知识,而有些则需要特殊的行为和技能 一些额外的数据,因此他添加了插件 想到的是插件的模型继承。但既然是 不可预见的一个安装将有多少插件和一个 特定的模型实例将附加到它或什么样的插件 (由于插件系统是异构的),性能是一个很大的问题 我的担心

抱歉,这个神秘的主题,但总结一下这是怎么回事,有点难。所以请容忍我一会儿

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

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

想到的是插件的模型继承。但既然是 不可预见的一个安装将有多少插件和一个 特定的模型实例将附加到它或什么样的插件 (由于插件系统是异构的),性能是一个很大的问题 我的担心

每当一个模型用于站点的访问者时,每个插件都需要 接受评估

因此,我想确保我得到了一个查询为1的模型的一切 而不是几个。这自然会导致相当多的连接, 实际上至少是O(N)(N是 系统已针对特定型号安装)。只有这一点让我担心 关于这种系统的可扩展性和可行性

因此,如果我的担心是合理的,我想征求社区的意见 如果这是一个合理的方法?顺便说一下,在实施了我的 在自己的解决方案中,我遇到了来自 django模型utils,现在用于向下投射部分 (如果有必要的话)

现在,我也在考虑可能的替代方案,而不放松 插件系统本身的灵活性(这是必要的):

插件系统不需要将每个插件保存到自己的表中,而是可以 设计为仅利用一个表和所有通用插件元 数据保存为列,其余数据被序列化为JSON并保存 因此,在另一列中。因此,可以很容易地获得所有插件 对于模型,只需使用 序列化数据。这对于异构和 同质插件。一个插件(以及整个系统)自然会松脱 查询数据库以获取详细信息时的一些选项 插件的序列化数据。还有一些酸性约束,如not 能够以原子方式递增单个字段。但这些限制 如果插件需要,也可以克服它(通过 专用数据模型的方法(例如)

再一次,如果这是一个更具可扩展性的应用程序,我想征求您的意见 方法与上面我的初始解决方案相比,或者 这就是问题的臭味,应该不惜一切代价避免吗

提前感谢您的帮助和提示。非常 感激

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

更新1
我意识到我从来没有明确表示我的应用程序是基于Django 1.6的,因此我的目标是尽可能不依赖数据库(不包括sqlite),即使我个人只使用PostgreSQL。

如果使用postgres,请查看hstore字段类型。你可以创建一个包含一些全局到所有字段的插件表和一个可以存储不同元数据的hstore字段。我刚刚意识到我从来没有明确说过我的应用程序是用Django编写的。。。因此,我的目标也是尽可能成为db不可知论者。尽管如此,我还是很感谢您对hstore的提示,因为我以前从未听说过它,而且它是一个相当有趣的功能。:)不过,我会在一分钟内更新我的问题,使之更加具体。