对于需要关系数据库的全球组织来说,MySQL已经成为一种便宜的选择。但是,随着近年来数据种类和数量的增加,已经出现了非关系数据库(如MongoDB)来满足我们的流动数据的新需求。
文章目录
在MongoDB中,文档可以具有自己独特的结构。可以随时添加新字段,并且可以包含任何类型的值。这种类型的功能将需要重组关系数据库。
尽管密钥对于一个文档必须是唯一的,但是允许您使用与其他文档相同的密钥。
使用MongoDB数据模型,您可以在数据库中表示层次结构关系,数据数组和其他复杂结构。在某些情况下,MongoDB的性能优于MySQL,因为MongoDB不使用联接来连接数据,从而提高了性能。
MySQL和MongoDB都使用索引来允许它们快速查找数据。
MySQL:对于MySQL,如果未定义索引,则数据库引擎必须扫描整个表以查找所有相关行。MongoDB:在MongoDB中,如果未找到索引,则必须扫描集合中的每个文档以选择与查询语句匹配的文档。从客户表中选择记录:
MySQL的:SELECT *
FROM customerMongoDB: db.customer.find()将记录插入到客户表中:MySQL的: INSERT INTO customer (cust_id, branch, status)
VALUES ('appl01', 'main', 'A')MongoDB: db.customer.insert({
cust_id: 'appl01',
branch: 'main',
status: 'A'
})更新客户表中的记录:MySQL的: UPDATE customer
SET branch = 'main'
WHERE custage > 2MongoDB: db.customer.update({
custage: { $gt: 2 }
},
{
$set: { branch:'main' }
},
{
multi: true
})MySQL可能会受到SQL注入攻击,使其易受攻击。由于MongoDB使用对象查询(将文档传递到该对象的位置来解释要查询的内容),因此由于MongoDB没有可解析的语言,因此降低了遭受攻击的风险。
MongoDB使用副本集来创建数据的多个副本。副本集的每个成员在过程中的任何时候都可以扮演主要或次要角色。默认情况下,对主副本执行读写操作,然后将其复制到辅助副本。
MySQL目前归Oracle Corporation所有。
MongoDB:10gen从2007年开始开发MongoDB,其名称来源于“巨大”一词。它于2009年发布,现已成为流行的NoSQL数据库。10gen后来改名为MongoDB,Inc.,并继续进行软件开发以及企业解决方案的销售。其他信息也可以在以下位置找到:
MySQL Wiki
Oracle MySQL事件
MySQL事件
MySQL用户组列表
MongoDB:“与MongoDB相比,MySQL优于NoSQL的一个优势是MySQL社区要比NoSQL好得多。这主要是因为NoSQL是相对较新的,而MySQL已经存在了几年。” analyticbridge.com的Jenny Richards说。可以在https://www.MongoDB.com/community上找到MongoDB社区。该页面提供了各种事件,网络研讨会,用户组和MongoDB大学。
在MySQL和MongoDB之间进行选择时,需要考虑多种因素:
MySQL:像MySQL这样的关系数据库有很多用例。需要多行事务的任何类型的应用程序(例如记帐系统)都将更适合于关系数据库。MongoDB不能轻松替代为关系数据库构建的旧系统。MongoDB:另一方面,MongoDB有很多适合的用例。其中一些包括实时分析,内容管理,物联网,移动和其他类型的新应用程序,它们可以利用MongoDB提供的功能。可以选择使用MongoDB的一些方案包括:
没有明确的架构定义-在许多情况下,当使用没有明确的架构定义的数据库时,MongoDB可能是一个不错的选择。
在以下情况下:
当向关系数据库(如MySQL)添加新列时,它会锁定整个数据库并导致性能问题。使用MongoDB,由于它没有架构,因此您可以添加新字段,并且不会影响现有行。
写入负载很高-对于与读取相比写入很多的环境,MongoDB是一个不错的选择。MongoDB的编写具有很高的插入率,而不必像MySQL那样担心事务安全性。
没有数据库管理员-如果您没有数据库管理员,则可能值得考虑MongoDB。
您将失去与其他数据库的连接-如果您的环境与其他服务器之间没有可靠的连接,则MongoDB的高可用性可能会有所帮助。
MySQL和MongoDB都有其优点和缺点。如果您的数据需要多行事务,或者您必须支持旧版应用程序,那么关系数据库可能是您组织的正确选择。但是,如果您需要一个更灵活,无模式的解决方案来处理非结构化数据,那么MongoDB是值得考虑的。
本文翻译自https://blog.panoply.io/mongodb-and-mysql