【问题标题】:Mongodb and DjangoMongoDB 和 Django
【发布时间】:2012-08-27 13:52:00
【问题描述】:

我目前在我的 django 应用程序中使用两个数据库 - 用于存储数字数据的 mongodb 和用于处理关系和提供业务域背景的 mysql。

我有一个担心:

首先 - 我正在使用 mongoengine 以及 django 信号和自定义模板标签。含义:

每当我调用此过滤器时。 {{myobject|do_sth:"20"}} 过程是这样的:

过滤器调用 -> myobject 的 do_sth 属性,参数为“20”调用 -> 发送信号 job_done -> 接收信号 job_done -> 创建单引擎文档 -> 保存

我不知道这是否清楚,但这只是不同技术的组合 - 我的问题是: 在这种情况下效率问题如何?有没有人尝试过该解决方案或有类似经验?

另一个问题:由于我比较经常使用上面描述的过程,我应该关心mongodb集合中的项目数。假设它会在一周内增长到 10 000,然后我们清除集合 - 可以吗?

【问题讨论】:

  • 这取决于 job_done 过程需要多长时间以及 mongoDB 集合中的项目(也称为文档)有多大。使用 mongoDB,您可以垂直扩展(更多服务器)而不是水平扩展(更多内存、更快的 HD 等)您需要更具体才能更好地理解问题
  • @GianPaJ 你混淆了垂直和水平缩放
  • 是的,我的错。水平是更多的服务器。
  • 对象看起来像这样:名称、符号、creation_date 和 ListField(最多 200 个浮点数)。它们在数据库中存储大约一周。实际上,尽管几乎涉及每个应用程序层,但总体过程效果很好。存储此数字数据的目的是跟踪用户搜索的数据。此外,它还可以为每个名称列表对生成复杂的报告。
  • @user1642053 如果您使用的是 mongo >= 2.2,那么您可以使用 TTL 自动使集合中的文档过期。可能比手动操作要快一些。

标签: python django mongodb django-templates mongoengine


【解决方案1】:

我建议对于一个简单的模板标签来说逻辑太多了,在视图本身中做可能会更好 - 至少这是 djangonauts 会争论的。

我认为您正在输出过滤器的结果 - 而不是仅仅调用信号来创建数据。如果您不输出结果,则使处理脱机并且对用户无阻塞。我在celery 上取得了巨大的成功,用于长时间运行/可能阻塞的任务(你不必使你的堆栈复杂化,因为 mongodb 作为队列后端工作得很好)。

生产环境中的 MongoDB 具有跨大型集群的大量数据 - 因此 10,000 个文档是相对少量的数据。

【讨论】:

  • 同意,我终于决定摆脱过滤器,我正在使用模型属性来获取我想要的数据并发送信号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多