2

我想尝试带有 mongoengine 的 Mongodb。我是 Django 和数据库的新手,我很适合外键、连接、循环导入(你可以命名它)。我知道我最终可以解决这些问题,但对于我正在做的事情,Mongo 似乎只是一个更简单的解决方案。我的问题是我正在使用很多可插入的应用程序(Imagekit、Haystack、Registration 等),并且想知道如果我进行切换这些应用程序是否会继续工作。我会遇到任何已知的头痛吗,如果是这样,我可能会一直用 MySQL 敲我的脑袋。

4

6 回答 6

9

没有理由不能将标准 RDBMS 之一用于所有标准 Django 应用程序,然后将 Mongo 用于您的应用程序。您只需要用 Mongo 方式替换所有从 Django ORM 处理事物的标准方式。

所以你可以保留 urls.py 及其简洁的模式匹配,视图仍然可以获取参数,模板仍然可以获取对象。

您将丢失查询集,因为我怀疑它们与 RDBMS 模型的联系过于紧密——但它们实际上只是懒惰评估的列表。只需忽略有关编写 models.py 的 Django 文档,并在 Mongo 范例中编写您的数据库业务逻辑。

哦,您将没有 Django 管理界面来轻松访问您的数据。

于 2011-01-17T23:16:06.527 回答
3

您可能想查看django-nonrel,这是一个年轻但有前途的 Django NoSQL 后端尝试。目前缺乏文档,但如果你只是解决它,它会很好。

于 2011-01-31T12:42:45.153 回答
1

我已经将 mongoengine 与 django 一起使用,但您需要创建一个类似 mongo_models.py 的文件。在该文件中定义您的 Mongo 文档。然后,您创建表单以匹配每个 Mongo 文档。每个表单都有一个保存方法,用于插入或更新存储在 Mongo 中的内容。Django 表单旨在插入任何数据后端(需要一些技巧)

注意:如果您有可以在文档或模型中描述的非常明确和结构化的数据,那么不要使用 Mongo。它不是为此而设计的,像 PostGreSQL 这样的东西会更好地工作。

  • 我将 PostGreSQL 用于关系数据或结构良好的数据,因为它对此有好处。内存占用小,响应好。
  • 我使用 Redis 来缓存或在内存队列/列表中操作,因为它非常适合。出色的性能,只要您有足够的内存来应对它。
  • 我使用 Mongo 来存储大型 JSON 文档并对其执行 Map 和 reduce(如果需要),因为它非常适合。如果可以加快查找速度,请务必在某些列上使用索引。

不要用圆圈来填充方孔。它不会填满它。

我看到太多帖子有人想用 Mongo 交换关系数据库,因为 Mongo 是一个流行词。不要误会我的意思,Mongo 真的很棒......当你适当地使用它时。我喜欢适当地使用 Mongo

于 2012-04-18T07:25:33.020 回答
0

预先,它不适用于任何现有的 Django 应用程序,它提供了它的模型。目前没有用于将 Django 的模型数据存储在 mongodb 或其他 NoSQL 存储中的后端,除了数据库后端之外,模型本身在某种程度上还有争议,因为一旦您开始使用带有django.contrib模型模板的某人的应用程序(包括应用程序) -查看三元组,每当您需要稍微不同的模型时,您要么必须编辑应用程序代码(完全错误),在运行时动态编辑导入的 Python 模块的内容(神奇),完全分叉应用程序源(繁琐)或提供额外的设置(很好,但很少见,有django.contrib.auth可能是唯一广为人知的应用程序示例,它允许您动态指定它将使用哪个模型,就像通过AUTH_PROFILE_MODULE设置的用户配置文件模型一样)。

这听起来可能很糟糕,但它真正的意思是你必须并行部署 SQL 和 NoSQL 数据库,并从应用程序到应用程序的基础上——就像 Spacedman 建议的那样——如果 mongodb 最适合某些应用程序,地狱,只需推出您自己的自定义应用程序。

有很多优秀的 Djangonauts 都在考虑使用 NoSQL 存储。如果您关注过去 Djangocon 演示文稿中的信息流,那么每年都会有关于 Django 应如何利用 NoSQL 存储的重要讨论。我很确定,在今年或明年,有人会重构应用程序和模型 API,为干净的设计铺平道路,最终可以将所有不同风格的 NoSQL 存储统一为 Django 核心的一部分。

于 2011-01-17T23:47:19.790 回答
0

我最近尝试过这个(虽然没有 Mongoengine)。恕我直言,有很多陷阱:

  • 没有管理界面。
  • No Auth django.contrib.auth 依赖于数据库接口。
  • 很多事情都依赖于 django.contrib.auth.User。例如,RequestContext 类。这是一个巨大的障碍。
  • 无需注册(依赖于 DB 接口和 django.contrib.auth)

基本上,通过 django 界面搜索对 django.contrib.auth 的引用,你会看到有多少东西会被破坏。

也就是说,MongoEngine 可能提供了一些支持来用更好的东西替换/增强 django.contrib.auth,但是有很多东西依赖于它,很难说你会如何修补这么多东西。

于 2011-01-18T20:07:54.467 回答
-1

主要陷阱(对我来说):没有加入!

于 2011-01-18T00:30:23.607 回答