MongoDB 决策分析

一、MongoDB基本概念

MongoDB 是一个高性能,开源,无模式的文档型数据库,是当前NoSQL 数据库产品中最热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式,MongoDB 使用C++开发。MongoDB 的官方网站地址是:http://www.mongodb.org/

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json 的bjson 格式,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它是一个面向集合的,模式自由的文档型数据库。

二、对比


MongoDB


关系型数据库


数据存储


面向集合


面向关系表


数据结构


模式自由


二维表关系模式


事务


不支持


支持


大型数据(视频)


很好


一般


大数据量查询(千万条以上)


很好


较差


数据库维护


相对简单


相对复杂


数据及表关系、结构浏览


困难


简单


数据安全性


较差


很好


分布式


很好


一般


查询


非常灵活


非常强大


主外键关联


不支持


支持


索引


支持


支持


存储过程


支持


支持

三、对比说明

1. 数据存储

MongoDB是面向集合(collection)的,集合中又包含多个文档(document),并支持对象型数据的存储。其中集合和文档的概念,在关系型数据库中类似于表(table)和元组(row:也就是所谓的一行数据)。另外MongoDB是以bson形式存储,而关系型数据库是以二维关系形式存储。

2. 数据结构

MongoDB对数据结构的支持非常灵活,从横向到纵向的支持都很好,比如下面的数据都能存储在同一个集合中:

① {“name”: “wangwu”, “age”: 25}

② {“name”: “lisi”}

③ {“state”: “激活”, “remark”: “无”}

④ {“name”: 6, “age”: “你猜”}

从上面的例子我们能看出,横向方面,支持字段的动态增减(如①和②),从纵向方面,支持字段数据类型混合存储(如①和④)。而在关系型数据库中这种方式的存储是绝对达不到的。

3. 事务

MongoDB本身不支持事务处理,只能通过程序代码来保证。

4. 大型数据

MongoDB不仅支持结构化数据,还支持非结构化数据存储(音频、视频、文档、XML、HTML等),而关系型数据库虽然支持大型数据(如视频)的存储,但是不管从存储效率上还是从获取速度上都不及MongoDB,MongoDB可采用高效的二进制来存储大型数据。

5. 大型数据量查询

MongoDB对于上千万条以上的数据,在查询速度上非常快。而这点却是关系型数据库中的一大痛处。

6. 数据库维护

MongoDB在数据库备份和还原以及数据的导入导出的操作上是非常简单的,通过简单的命令即可完成,还支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移,而关系型数据库在操作上相对复杂一些,上手难一些。

7. 数据安全性

MongoDB在数据安全方面比较差,如果稍有不慎或操作不当,很容易造成数据丢失或数据错误,因此在数据维护和操作上,要非常小心。而关系型数据库在这方面上的担心却要少很多。

8. 分布式

MongoDB非常适合由数十或数百台服务器组成的数据库。支持自动分片以支持云级别的伸缩性。其中自动分片功能支持水平的数据库集群,可动态添加额外的机器。关系型数据库在分布式的支持和操作上都要困难些、发杂些。

9. 查询

MongoDB的查询语句与关系型的sql语句有着很大的不同,或者说是两种风格,二者表现都很不错,MongoDB主要体现在灵活易用上,而sql则体现在功能全面强大上。

10. 主外键关联

MongoDB不支持主外键关联,也没有“约束”的概念。

11. 索引

MongoDB同样支持索引

12. 存储过程

MongoDB同样也支持存储过程

四、选取MongoDB的理由

1. 对于初创型的业务非常适用

MongoDB能更容易应对马良行业务功能点多变的场景,MongoDB采用No schema的方式,免去变更表结构的痛苦,有着很高的灵活性,该特性为开发带来了极大的便捷,也能更容易应对业务上的字段调整。

2.开发更快响应

调整业务时,开发人员理论上只需要调整页面字段结构。

3.强大的大数据处理能力

程序的规模日渐变大,需要储存更多的数据、服务更多的用户以及需求更多的计算能力。

4.使用MongoDB的公司

随着NoSQL生态系统的发展,MongoDB一路高歌猛进。各种企业和初创公司对NoSQL的需求日益增加,对有助于提高效率和无缝扩展的工具的需求也与日俱增,国内各大互联网公司都在使用,如:百度、腾讯、360、美团等。

五、学习成本

1.易上手

MongoDB社区提供丰富的API文档,开发人员可以很快掌握简单的CURD。

2.维护成本低、稳定性高

阿里云提供MongoDB的云服务,很简单的就可以创建一个实例,同时高性能存储,提供三节点副本集的高可用架构,容灾切换,故障迁移完全透明化。并提供专业的数据库在线扩容、备份回滚、性能优化等解决方案。

六、风险点

1.集合滥用

MongoDB的文档数据模型有着很高的灵活性,该特性为开发带来了极大的便捷。但这同样代表着更多的责任一一MongoDB的灵活性会让开发变懒,请绝对不要滥用这种灵活性。专家们建议大家不要在一个集合中存储多个维度或是数据结构变化太多的文档,因为这将会使后期的维护变得异常复杂。将不同类型及结构的文档分散存放在他们自己的集合中是正确的做法。异常的集合,比如该集合中的平均文档体积过大、结构过于复杂、结构不规范等。

2.弱事务

MongoDB是以牺牲安全、事务、结构来换取简单、高效、灵活的,根据 CAP定理 https://zh.wikipedia.org/zh/CAP%E5%AE%9A%E7%90%86,nosql们,只能代码级事务处理(相当于MYSQL中有某张表记录操作日志,再定时检查日志标记,做回滚)

参考:http://blog.csdn.net/liuxinghao/article/details/50178045

http://www.uml.org.cn/sjjm/2014081111.asp

来自为知笔记(Wiz)

时间: 2024-11-03 03:45:59

MongoDB 决策分析的相关文章

软件项目管理(CMMI成熟度)实践——之决策分析(1)

决策分析与解决方案(Decision Analysis and Resolution, DAR)的目的,在于利用正式的评估过程,依据已建立的准则,评估已识别的多种备选方案,以分析可能的决策,确定最佳解决方案.正式的决策流程减少了决策的主观性,提高了决策的科学性. 在项目实施过程中,技术方案选型往往是比较揪心的一个过程,需要在满足需求.技术先进性.成熟度.成本.人力.工期等方面进行平衡,而且这些方案是项目干系人和项目组成员在头脑风暴会议经上,通过快速互动.刺激提出有创意的备选技术解决方案.每个方案

ubuntu安装mongodb

参考:http://blog.csdn.net/zhushh/article/details/52451441 1.导入软件源的公钥 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 2.为mongodb创建软件源list文件 ubuntu12.04 echo "deb http://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.2 multi

mongodb 安装、windows服务、创建用户

http://www.cnblogs.com/best/p/6212807.html 打开MongoDB的安装目录如“C:\Program Files\MongoDB\Server\3.4\bin”,并在此目录下新建一个mongo.config文件,文件内容如下: ##数据库目录## dbpath=C:\data\db ##日志输出文件## logpath=C:\data\log\db.log 使用cmd进入命令行 使用cd切换目录到安装目录下,如:cd  C:\Program Files\Mo

MongoDB 学习笔记之 WriteConcern

WriteConcern: 转载:MongoDB WriteConcern(写关注)机制 http://www.ywnds.com/?p=3688&viewuser=40 MongoDB部署模式 MongoDB的部署模式有三种:第一种是单机模式(开发测试):第二种是高可用复制集:第三种是可扩展分片集群.如下图所示. 知道了MongoDB几种常用的部署模式之后,接下来我们看看每种部署模式的写操作过程. MongoDB单点写操作 从上图可以看出,其中primary是MongoDB的一个实例,里面有两

MongoDB副本集

简介 mongodb复制(replication)是将数据同步在多个服务器的过程.主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致.复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并保证数据的安全性.复制还允许您从硬件故障和服务中断中恢复数据. 而副本集(replica set)是从mongodb 1.6 提供的新功能,比复制功能要强大一些并增加了故障自动切换和自动修复成员节点,

mongodb 学习

该命令如果数据库不存在,将创建一个新的数据库, 否则将返回现有的数据库.如果想创建一个数据库名称为 <mydb>, 那么 use DATABASE 语句应该如下: >use mydb switched to db mydb=============================================================================要检查当前选择的数据库使用命令 db >db mydb============================

MongoDB之update

Update操作只作用于集合中存在的文档.MongoDB提供了如下方法来更新集合中的文档: db.collection.update() db.collection.updateOne() New in version 3.2 db.collection.updateMany() New in version 3.2 db.collection.replaceOne() New in version 3. 你可以通过指定criteria或者filter来指定你想更新的文档: update函数执行

MongoDB 数据分发

在MongoDB(版本 3.2.9)中,数据的分发是指将collection的数据拆分成块(chunk),分布到不同的分片(shard)上,数据分发主要有2种方式:基于数据块(chunk)数量的均衡分发和基于片键范围(range)的定向分发.MongoDB内置均衡器(balancer),用于拆分块和移动块,自动实现数据块在不同shard上的均匀分布.balancer只保证每个shard上的chunk数量大致相同,不保证每个shard上的doc数量大致相同. 一,数据按照chunk数量进行均衡分发

MongoDB 搭建分片集群

在MongoDB(版本 3.2.9)中,分片是指将collection分散存储到不同的Server中,每个Server只存储collection的一部分,服务分片的所有服务器组成分片集群.分片集群(Sharded Clustered)的服务器分为三中类型:Router(mongos),Config Server 和 Shard(Replica Set 或 Standalone mongod).使用分片集群,不需要使用强大的计算机,就能存储更多的数据,处理更大的负载.分布式数据库系统的设计目的是: