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

问题描述 投票:17回答:3

我想使用以下方式制作docs.google.com之类的应用程序(没有其api,完全在我自己的服务器上)前端:骨干后端:节点

您认为哪个数据库更好? MySQL或MongoDB的?应该支持良好的可伸缩性。我熟悉php上的mysql,如果答案是mysql,我会很高兴。但是我看到了很多教程,他们使用mongodb,为什么他们在没有mysql的情况下使用mongodb?我应该使用什么?

任何人都可以给我链接一些使用骨干,Node,mysql(或mongo)构建的示例应用程序(带有源代码)。或至少一个应用。与节点和MySQL

感谢

mysql node.js mongodb backbone.js
3个回答
39
投票

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

但是您会因此而损失一些:您无法加入记录。实际上,您存储的JSON结构只能通过SQL中的联接来完成,但是在MongoDB中,数据只有一种结构,而在SQL中,您可以进行不同的查询并以其他方式更轻松地表示数据,因此,如果您需要对您的数据库进行大量分析,MongoDB会变得更加困难。

我认为MongoDB中的查询语言比SQL更“粗糙”,部分是因为它不那么熟悉,部分是因为查询功能随意地组合在一起,部分是为了使其成为有效的JSON,部分是因为存在从字面上看,有两种做同一件事的方式,有些是较旧的方式,没有其他方式有用或定期格式化。而且,SQL的简单基于行的设计增加了数组和子对象类型的复杂性,因此语法必须能够处理对包含您定义的值的[[some

,<< all 定义的值,包含only定义的值,并包含none定义的值。相同的区别适用于对象键及其值,这使查询语法更难掌握。 (虽然我可以看到需要用到小写字母,但是$where查询参数是一个警笛之歌,它需要在数据的每个记录上运行并返回布尔值的javascript函数,因为您可以轻松定义哪些对象是否要返回,但必须在数据库中的[[every记录上运行,无法使用索引。)所以,这取决于您要执行的操作,但是由于您说它是针对Google Docs克隆的,因此您[[大概不在乎任何表示形式但是]文档表示形式本身以及您'可能仅根据文档ID,文档名称或所有者的ID /名称进行查询,在查询中没有什么太复杂的。

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

我还很努力地选择使用MongoDB为并非针对其构建的任务而创建的炒作。所以我的2美分是:

就像David所说的那样,在MongoDB中存储和检索文档可能是分层对象很容易。如果您要存储大于16Mb的文档,它将变得更加复杂-MongoDB的答案是GridFS。

    使用MySQL来组织文件夹,组中的文档,跟踪哪些用户拥有哪些文档以及他/她向谁提供了对其的访问权限-使用EXPLAIN内置的强大的带有联接等功能的SQL查询具有您的优势优化,触发器,函数,存储过程等。MongoDB遥不可及。
  1. 那么,是什么使您无法同时使用MySQL组织文档和使用MongoDB来存储由ID标识的一个文档集合(或多个集合-每个文档类型一个)?在我看来,最好的选择是,在一个应用程序中使用两个数据库确实不是问题。

    MySQL将存储用户,组,文件夹,权限-随便您如何-并且对于每个文档,它将存储对集合和文档ID的引用(MongoDB有一种特殊格式-DBRefs)。如果所有文档都小于16MB,则MongoDB将自己存储在集合中,或者将集合中的文档的预览和元数据以及GridFS中的整个文档存储在其中。

  • 大卫提供了一个很好的答案。要添加一些内容。

    MongoDB的灵活特性允许轻松进行敏捷/迭代开发。
    MongoDB之类的node.js在本质上是异步的,并且在异步环境中运行良好。

    Mongoose是一个很好的ODM(对象文档映射器),它使使用带有Node.js的MongoDB的工作变得非常自然。与ORM不同,这是非常薄的一层。

    1. 对于类似于Google Doc的功能,MongoDB提供的灵活性和非常丰富的数据结构感觉更合适。
    2. 您可以通过搜索mongoose,node和MongoDB找到一些很好的示例帖子。
    3. 这里是一个也使用骨干.js且看起来不错的http://mattkopala.com/blog/2012/02/12/getting-started-with-nodejs/

    12
    投票
    就像David所说的那样,在MongoDB中存储和检索文档可能是分层对象很容易。如果您要存储大于16Mb的文档,它将变得更加复杂-MongoDB的答案是GridFS。

    7
    投票
    © www.soinside.com 2019 - 2024. All rights reserved.