从架构的角度来看,将Mongoengine合并到Django树中作为数据库后端是否可行?

从架构的角度来看,将Mongoengine合并到Django树中作为数据库后端是否可行?,django,mongoengine,Django,Mongoengine,我喜欢Django,通常更喜欢它而不是微型框架,这样我就不会再发明自行车,而是使用包括电池在内的电池。我主要依靠Django REST框架来创建REST API,并不真正使用Django的往返部分(例如模板和表单) 但我迫切需要MongoDB支持我的项目。在许多领域,如生物信息学,必须使用深度嵌套的JSON。在纯Django中,有两种方法可以解决此问题: 将嵌套的JSON数据表示为关系表,这是一种巨大的时间浪费 对嵌套的JSON数据使用JSONField——这是一个关键,因为您经常需要为这些JS

我喜欢Django,通常更喜欢它而不是微型框架,这样我就不会再发明自行车,而是使用包括电池在内的电池。我主要依靠Django REST框架来创建REST API,并不真正使用Django的往返部分(例如模板和表单)

但我迫切需要MongoDB支持我的项目。在许多领域,如生物信息学,必须使用深度嵌套的JSON。在纯Django中,有两种方法可以解决此问题:

  • 将嵌套的JSON数据表示为关系表,这是一种巨大的时间浪费
  • 对嵌套的JSON数据使用JSONField——这是一个关键,因为您经常需要为这些JSON指定模式(您必须在应用程序级别执行),或者在这些JSON数据中使用超链接或其他复杂字段(这是不可能的)
  • 有一个非常流行的库mongoengine,它严格遵循Django ORM API。我觉得它应该是Django的一部分。但是到目前为止,要将其与Django一起使用,您必须自己重新实现每一项集成(身份验证、管理命令、Django REST框架集成等)


    所以,我想:有什么问题吗?为什么我们不能将Mongoengine作为另一个数据库后端一次性集成到Django中?Django已经有Postgres特定的字段。为什么我们不能只让Mongo特定?我能看到的唯一障碍是Django的架构设计,它可能对SQL-ish数据库的性质有很强的假设,并且与Mongo不兼容


    如果您擅长Django体系结构,您能分享一下您对这种集成尝试可行性的考虑吗?

    我个人认为这种方法非常有用而且简单。您可以尝试一下:


    “为什么我们不能将Mongoengine作为另一个数据库后端一次性集成到Django中?”因为服务器上的JavaScript旨在让生活变得简单,而且没有简单的方法来做正确的事情——Django基于Python的生态系统,而Mongo是JavaScript。JavaScript不是一种特定于领域的语言,也不是一种灵丹妙药。您需要性能和JSON吗?您可以使用Go和自定义模块来提供JSON解决方案。@dmitryro Mongo一开始并不是关于javascript的。它更多的是关于嵌套的数据结构。有时您不需要关系,您需要将嵌套数据永远绑定到其父数据。有时候你需要关系。Mongoengine支持应用程序级别的关系。因此,它是RDBMS的超集。在某些情况下可能会慢很多,但仍然值得考虑。您在Postgres中也有JSON支持和文档数据类型。您的问题是一个问题,但对于框架理念中的主要范式转变来说,这还不够根本。当JSON数据有了低级语言(C或C++)实现时,问题就会得到解决——比如Redis是用C编写的,有很好的理由——以正确的方式执行、扩展和管理内存。@dmitryro不幸,将一个巨大的子文档表示为JSONField不够细粒度,因为您需要它的模式。JSONField需要允许Django级别的递归模型,但遗憾的是,这不可用。抱歉,我看不到与C/C++级别的连接。看来,如果Django允许在JSONField中使用子模型,那就足够了。谢谢你的建议。你广泛使用它了吗?从Github来看,它似乎早就死了。Mongoengine也做得不好,但它肯定是活的。因此,我认为,到目前为止,Mongoengine的功能更加丰富。我没有使用if来创建REST API,但除此之外,我在abd中广泛使用了if,它对我来说非常有效!:)