使用django的Mongodb或Couchdb构建类似于topcoder的应用程序?

时间:2011-10-22 13:09:44

标签: python django mongodb couchdb

这就是我所拥有的: -

  1. Ubuntu 11.10。
  2. Django 1.3
  3. Python 2.7
  4. 我想要做的是构建一个类似于顶级编码器的应用程序,并且我已经勾勒出应用程序的骨架版本。基本要求是: - 1.保存代码。 2.保存用户名和等级。(用户配置文件) 3.应该允许教师创建多项选择题。(类似于Google文档)。

    我有Django的基本知识,之前已经构建了几个(基本)应用程序。不是构建一个在线工具,而是可以在Django中构建与web2py之上的conf2py非常相似的东西。

    让我们称这个小项目为考试(我知道,非常原创),是否有可能构建一个更像Django插件的应用程序,或者我的Django概念绝对错误?

    主要问题是: 由于我想学习一个新的DB并且已经在Django中使用postgres,我应该为Django选择CouchDB或MongoDB吗?

    答案可以是某些文件或博客的解释或链接,可以告诉我利弊。

3 个答案:

答案 0 :(得分:3)

一般差异

Django Specific

我的所有研究都指出我认为Mongo和Couch足够相似,以至于您的选择可能归结为个人(主观)偏好,即使在用例上也是如此。就个人而言,我已经开发了一个CouchDB迷信,我正在寻找使用它的理由。

影响决策的关键因素应该是哪个noSQL解决方案拥有最成熟的Django ORM框架?

答案 1 :(得分:3)

我在Django中使用了mongo-engine,但你需要专门为Mongo文档创建一个文件,例如。 Mongo_models.py。在该文件中,您可以定义Mongo文档。然后,您创建表单以匹配每个Mongo文档。每个表单都有一个save方法,用于插入或更新存储在Mongo中的内容。 Django表单旨在插入任何数据后端(使用一些工艺)。

如果你走这条路,你可以躲避Django非rel,这仍然不是Django 1.4的一部分。另外我相信django-nonrel现在处于中断状态。

我广泛使用过CouchDB和Mongo。 CouchDB有一个可爱的界面。我的同事正在为Mongo做类似的事情。 Mongo的map和reduce远远快于CouchDB。 Mongo的响应能力更强,可以加载和检索数据。 Mongo的python库更容易使用(pymongo和mongo-engine都很棒)

请务必阅读Mongo制作推荐!不要在与Django相同的节点上运行一个实例,也不要准备在流量达到峰值时进行野蛮烧毁。 Mondo与Memcache / Redis配合使用,可以存储减少的数据以便快速查找。

请注意:如果您具有可在文档或模型中描述的定义明确且结构化的数据,则不要使用Mongo。它不是为此而设计的,像PostGreSQL这样的东西会更好。

  • 我将PostGreSQL用于关系或结构良好的数据,因为它对此有好处。占用内存小,响应良好。
  • 我使用Redis缓存或操作内存队列/列表,因为它非常有用。卓越的性能,让您有机会应对它。
  • 我使用Mongo存储大型JSON文档并执行Map并减少它们(如果需要),因为它非常有用。如果可以加快查找速度,请务必在某些列上使用索引。

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

答案 2 :(得分:2)

我已经将CouchDB与Django一起用于生产应用程序。 Couch很好并且有一些好主意,但我正在将该应用程序移到MongoDB上。为什么? Django社区支持Mongo。 Django-nonrel有一个MongoDB后端。使用Django-toolbox我可以在模型中嵌入模型并获得一些基本的管理支持。

如果我没记错的话,Django-nonrel将最终融入Django核心。在五年的时间里,我发现Django对Mongo的支持远远超过Couch。当然可以改变,但我认为Mongo更合适。