哪个数据库适合我的应用程序mysql或mongodb?使用Node.js,Backbone,Now.js

use*_*989 17 mysql mongodb node.js backbone.js

我想使用frontend:backbone backend:node创建像docs.google.com这样的应用程序(没有api,完全在我自己的服务器上)

您认为哪个数据库更好?mysql还是mongodb?应该支持良好的可扩展性.我熟悉php的mysql,如果答案是mysql,我会很高兴.但是我看到很多教程,他们使用mongodb,为什么他们使用没有mysql的mongodb?我该怎么用?

任何人都可以使用骨干,Node,mysql(或mongo)为我提供一些示例应用程序(使用源代码)构建的链接.或至少应用程序.用Node和mysql

谢谢

小智 39

使用MongoDB,您可以只存储 JSON对象并检索它们的完整形式,因此您实际上不需要ORM层,并且您可以花费更少的CPU时间来回传输数据.MongoDB背后的开发人员还使数据库的水平扩展具有更高的优先级,并允许您运行任意Javascript代码以预处理数据库端的数据(允许对数据进行map-reduce样式过滤).

但是你因为这些收获而失去了一些:你不能加入记录.实际上,您存储的JSON结构只能通过SQL中的连接来完成,但是在MongoDB中,您只有一个数据结构,而在SQL中,您可以以不同的方式查询并以更替代的方式表示您的数据,因此,如果您需要对您的数据库进行大量分析,MongoDB将使这更难.

在我看来,MongoDB中的查询语言比SQL更"粗糙",部分原因是因为它不太熟悉,部分原因是查询功能"随意"组合在一起,部分原因是为了使其成为有效的JSON,部分是因为字面意思是有两种方法可以做同样的事情,有些方法不像其他方式那样有用或经常格式化.而且,基于SQL的简单行设计增加了数组和子对象类型的复杂性,因此语法必须能够处理包含您定义的某些值的数组的查询,包含您定义的所有值,包含您定义的值,并且不包含您定义的任何值.相同的区别适用于对象键及其值,这使得查询语法更难理解.(虽然我可以看到对edge-case的需求,但是$where查询参数,它采用在数据的每个记录上运行的javascript函数并返回一个布尔值,是一首Siren歌曲,因为你可以轻松定义你想要的对象是否返回,但必须在数据库中的每条记录上运行,不能使用任何索引.)

所以,这取决于你想要做什么,但是既然你说它是用于Google Docs克隆,你可能不关心任何表示而是文档表示本身,你可能只会根据文档进行查询ID,文档名称或所有者的ID /名称,在查询中没有太复杂.

然后,我会说能够获取用户正在编辑的文档的JSON表示,并将其放入数据库并让它自动索引这些重要字段,值得学习新数据库的代价.

  • 请不要破坏您的帖子。如果您希望将其删除,您可以将其标记为版主参与,并要求他们将其删除,因为您不能,因为它已被接受。 (2认同)

esp*_*esp 11

我也在努力应对这一选择,看看使用MongoDB创建的炒作是不是为它创建的任务.所以我的2美分是:

  1. 正如David所说,在MongoDB中存储和检索文档可能存在的分层对象更容易.如果你想存储大于16Mb的文件会变得更加复杂 - MongoDB的答案是GridFS.

  2. 使用MySQL组织文件夹,组中的文档,跟踪哪个用户拥有哪些文档以及他/她提供访问权限的文件肯定更容易 - 您可以通过连接等强大的SQL查询,内置EXPLAIN优化,触发器,函数,存储过程等.MongoDB远在其中.

那么是什么阻止你使用MySQL组织文档和MongoDB来存储由id标识的一个文档集合(或几个集合 - 每个文档类型一个)?在我看来,最好的选择是在一个应用程序中使用两个数据库并不是问题.

MySQL将存储用户,组,文件夹,权限 - 无论您喜欢什么 - 并且对于每个文档,它将存储对集合和文档ID的引用(MongoDB具有特殊格式--DBRefs).MongoDB将文档本身存储在集合中(如果它们都小于16MB),或者集合中文档的预览和元数据以及GridFS中的整个文档.


Ste*_*cia 6

大卫提供了一个很好的答案 要添加一些东西.

  1. MongoDB的灵活性允许轻松灵活/迭代开发.
  2. 像node.js这样的MongoDB本质上是异步的,并且在异步环境中运行良好.
  3. Mongoose是一个很好的ODM(对象文档映射器),它使得使用Node.js处理MongoDB感觉非常自然.与ORM不同,这是一个非常薄的层.

对于类似Google Doc的功能,MongoDB提供的灵活性和非常丰富的数据结构感觉更适合.

你可以通过搜索mongoose,node和MongoDB找到一些很好的示例帖子.

这是一个也使用backbone.js并且看起来很好的http://mattkopala.com/blog/2012/02/12/getting-started-with-nodejs/