MySQL与MongoDB:选择数据管理解决方案

2020-05-22 00:00:00 数据 文档 支持 数据存储 的是

1. 简介

可以公平地说,作为IT专业人员,我们生活在数据管理时代的黄金时代。随着我们的软件系统在无数的可伸缩性和可用性要求的驱动下变得越来越复杂和分散,多年来使用的传统解决方案开始落后。

本教程的目的是对两种数据管理解决方案进行公平的概述:以MySQL为代表的成熟且广泛使用的关系数据库,以及一个新的子代MongoDB,MongoDB又代表了新一代数据存储。决不是一场与明确赢家的战斗。相反,其目的是通过研究MySQL和MongoDB的功能,讨论每个开发人员具有的不同保证和限制,帮助开发人员做出选择并找到适合其应用程序的合适选择。

通过优锐课的java架构分享中,讨论了关于MySQL与MongoDB:选择数据管理解决方案,get了很多知识点,分享给大家参考学习。

2. RDBM系统的优势

数据管理软件的历史和发展并不是花费时间的特别令人兴奋的话题。在相当长的一段时间里,关系数据库管理系统一直处于领导地位,多年来选择很明显,无论是MySQL,PostreSQL还是Oracle,仅举几例。 SQL(及其特定于供应商的方言)是查询关系数据存储的实际标准,根据定义,每个后端软件开发人员都必须学习并至少了解一些基础知识。直到近,当出现了一系列新的数据管理系统时,它的运行情况令人惊讶地良好,这种现象也被称为NoSQL(或不仅仅是SQL)运动。

3. NoSQL运动的新时代

如今,现代软件系统在数据量和请求/事务吞吐量要求方面面临的挑战表明,关系数据存储通常成为瓶颈,从而对整个系统的可伸缩性施加了限制。传统上,解决此问题的方法是购买一个更大的盒子(所谓的垂直可伸缩性),但是在某些时候要付出的代价变得非常非常高,使整个系统变得非常昂贵和不切实际。

业界一直在积极寻求一种便宜的方法来构建复杂的分布式系统,而不是使用水平可伸缩性。它还意味着想出关系数据存储的替代方案,它们也可以水平扩展。那一刻,NoSQL运动开始了。

4.表格,文档,图形,键/值

关系数据模型以元组和关系(通常称为表)表示所有数据。结构化数据非常适合此模型,并且很长一段时间没有其他可行的替代方案。随着NoSQL的发展,开发了许多替代数据模型,催生了一大堆专用数据存储系统。

NoSQL解决方案可以分为几类。文档数据存储旨在用于存储,查询和管理文档(半结构化数据)。该类别中较成熟的代表包括CouchDB,Couchbase,MongoDB,OrientDB和HyperDex。键/值数据存储区旨在存储,查询和管理关联数组(也称为字典或哈希)。

此类别中使用广泛的代表包括DynamoDB,FoundationDB,HyperDex,MemcacheDB,Redis,Riak,Aerospike和OrientDB。图形数据存储旨在有效地存储和操作图形结构。该类别的代表包括Neo4J,InfiniteGraph,GraphBase和OrientDB。后但并非不重要的一点是,宽列数据存储采用了混合方法(结合了键/值数据存储和传统关系数据存储的某些特征)。该类别中先进的代表包括Accumulo,Cassandra和HBase。

请注意,上面列出的不同NoSQL数据存储列表远非完整,它仅包含知名和使用广泛的名称,但是还有更多的名称。

5. MySQL和MongoDB:明智的决策

足够的介绍,让我们继续进行更实际的事情。在本教程的这一部分中,我们将使用MySQL和MongoDB来研究应用程序开发过程的所有方面,还花费一些时间来讨论部署和监视。目的是讨论每个数据存储区所做的取舍和设计决策,并分析它们如何改变我们开发应用程序的方式。此外,本教程的另一个目的是在考虑到应用程序体系结构,数据访问模式和存储要求的情况下,帮助确定MongoDB可能是比MySQL更好的选择(反之亦然)。

就像我们现在已经说过的那样,MongoDB是一个文档数据存储。它存储JSON样式的文档,这些文档被分组为集合。 MongoDB数据模型层次结构的顶部是一个数据库(请参阅官方文档以获取全面的详细信息)。 MongoDB的当前生产就绪版本为3.0.4。

从另一方面来看,MySQL是关系数据存储。数据存储在包含列的表中。这些表被分组到数据库中(请参阅官方文档以获取全面的详细信息)。 MySQL的当前生产就绪版本为5.6.25。

MySQL支持多个存储引擎,每个存储引擎都有自己的用途,并且具有其他存储引擎不具备的某些功能。在本教程中,我们假设使用了InnoDB存储引擎,因为它是默认和通用的存储引擎,除特殊用例外,建议使用它。

5.1.强制模式与无模式

MySQL作为关系数据存储区,其数据模型需要严格的架构:所有表均应使用定义的列来创建。 只有这样,才能使用SQL语言存储和查询数据。 由于每次需要修改数据模型时,都应先更改架构,然后再迁移数据,这使开发和部署过程变得有些复杂。 这是使用MySQL Shell和SQL语言创建新数据库,新表并向其中插入一行所需的典型步骤示例:

 CREATE DATABASE tutorial;
USE tutorial;
CREATE TABLE chapters (
 id INT PRIMARY KEY AUTO_INCREMENT, 
 title VARCHAR(255) NOT NULL
);
INSERT INTO chapters (title) VALUES ("MySQL and MongoDB: trade-offs, not battles");

相关文章