NoSQL 之 MongoDB - 01 NoSQL 和 MongoDB 简介

NoSQL数据库在2008年左右因应对高并发和海量数据存储的挑战而兴起,与关系型数据库相比,NoSQL具有更高的读写性能和扩展性。MongoDB作为一款非关系型数据库,支持文档型数据模型,提供强大的查询功能,并在不断发展以增强其事务处理能力。在选择数据库时,需考虑数据关联性、性能、一致性及可用性需求。MongoDB适用于需要高性能存储和处理大量低价值数据的场景,以及需要高伸缩性的应用。

NoSQL 简介

参考:NoSQL 简介

关系型数据库遇到的问题

2008 年左右,网站、论坛、社交网络开始高速发展,传统的关系型数据库在存储及处理数据的时候受到了很大的挑战,其中主要体现在以下几点:

  • 难以应付每秒上万次的高并发数据写入。

  • 查询上亿量级数据的速度机器缓慢。

  • 分库、分表形成的子库到达一定规模后难以进一步扩展。

  • 分库、分表的规则可能会因为需求变更而发生变更。

  • 修改表结构困难。

在很多互联网应用场景下,对数据联表的查询需求不是那么强烈,也并不需要在数据写入后立刻读取,但对数据的读取和并发写入速度有非常高的要求。

在数据量暴增的时代,若想用传统的关系型数据库来满足数据高并发读写、巨量数据的存储、数据库的扩展和高可用,则需要增加软硬件的规格,这将大幅提高成本。

在这样的情况下,非关系型数据库得到高速的发展。

什么是 NoSQL 数据库

RDB(Relational Database):关系型数据库。

NoSQL(NoSQL = Not Only SQL),意即“不仅仅是 SQL”,也叫非关系型数据库(non-relational)。

非关系型就是把数据直接放进一个大仓库,不标号、不连线、单纯的堆起来,从而提高了对海量数据的高性能存储及访问需求。

传统数据库由于受到各种关系的累赘,各种数据形式的束缚,难以处理海量数据以及超高并发的业务场景。

为了解决上述问题,必须有一款自废武功,以求在更高层次上突破瓶颈的数据库系统,例如 MongoDB,它摒弃了固有模式才能应付 Facebook 上亿比特的海量数据。

如果你之前只接触过关系型数据库,如 Oracle、Mysql 或 SQL Server,在学习 MongoDB 时可能会感到不安,突然有一款数据库不支持外键,不支持事务,不支持数据类型约定,会跟人一种没法用的感觉。


在现代的计算系统上,每天网络上都会产生庞大的数据量,这些数据有很大一部分是由关系数据库管理系统(RDBMS:Relational Database Manangement System)来处理。

1970 年 E.F.Codd’s 提出了关系模型的论文 “A relational model of data for large shared data banks”,这使得数据建模和应用程序编程更加简单。

通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。

NoSQL 是一项全新的数据库革命性运动,早期就有人提出了,发展至 2009 年趋势越发高涨。NoSQL 的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维注入。

NoSQL 分类

键值数据库

这类数据库主要是使用数据结构中的键 Key 来查找特定的数据 Value。

优点:在存储时不采用任何模式,因此极易添加数据。

这类数据库具有极高的读写性能,用于处理大量数据的高访问负载比较合适。

键值数据库适合大量数据的高访问及写入负载场景,例如日志系统。

主要代表是 Redis、Flare。

文档型数据库

这类数据库满足了海量数据的存储和访问需求,同时对字段要求不严格,可以随意增加、删除、修改字段,且不需要预先定义表结构,所以适用于各种网络应用。

主要代表是 MongoDB、CouchDB。

文档型数据库与关系型数据库很相似。

列存储型数据库

主要代表是 Hbase、Cassandra。

这类数据库查找速度快,可扩展性强,适合用作分布式文件存储系统。

图数据库

主要代表是 InfoGrid、Neo4J。

这类数据库利用”图结构“的相关算法来存储实体之间的关系信息,适合用于构建社交网络和推荐系统的关系图谱。

NoSQL 与 RDB 该怎么选择

既然 NoSQL 数据库有这么多的又是,那它是否可以直接取代关系型数据库?

NoSQL 并不能完全取代关系型数据库,NoSQL 主要被用来处理大量且多元数据的存储及运算问题。在这样的特性差异下,我们该如何选择合适的数据库以解决数据存储与处理问题呢?

这里提供以下几点作为判断依据:

1、数据模型的关联性要求

NoSQL 适合模型关联性比较低的应用,因此:

  • 如果需要多表关联,则 RDB 更适合

  • 如果对象实体关联少,则 NoSQL 数据库更适合

    • 其中 MongoDB 可以支持复杂度相对高的数据结构,能够将相关联的数据以文档的方式嵌入,从而减少数据之间的关联操作

2、数据库的性能要求

如果数据量多且访问速度至关重要,那么使用 NoSQL 数据库可能是比较合适的。NoSQL 数据库能通过数据的分布存储大幅地提高存储性能。

3、数据的一致性要求

NoSQL 数据库有一个缺点:其在事务处理与一致性方面无法与 RDB 相提并论。

因此,NoSQL 数据库很难同时满足强一致性与高并发性。

如果应用对性能有高要求,则 NoSQL 数据库只能做到数据最终一致。

4、数据的可用性要求

考虑到数据不可用可能会造成风险,NoSQL 数据库提供了强大的数据可用性(在一些需要快速反馈信息给使用者的应用中,响应延迟也算某种程度的高可用)。

一个项目并非只选择一种数据库,可以将其拆开设计,将需要 RDB 特性的放到 RDB 中管理,而其他数据放到 NoSQL 中管理。

MongoDB 简介

参考:MongoDB 简介

什么是 MongoDB

官方文档:https://www.mongodb.com。

MongoDB 是由 C++ 语言编写的,是一个基于分布式文件存储的开源 NoSQL 数据库系统。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。这会让曾经使用过关系型数据库的人比较容易上手。

MongoDB 将数据存储为一个文档,数据结构由键值对(key=>value)组成。

MongoDB 文档是 BSON(Binary Serialized Document Format 二进制序列化文档格式)格式,类似与 JSON 对象,字段值可以包含其它文档、数组以及文档数组。

在这里插入图片描述

MongoDB 的查询功能非常强大:

  • 不仅支持大部分关系型数据库中的单表(集合)查询,还支持范围查询、排序、聚合、MapReduce 等

  • MongoDB 的查询语法类似于面向对象的程序语言

MongoDB 发展历史

  • 2007 年 10 月,MongoDB 由 10gen 团队所发展

  • 2009 年 2 月首度推出 1.0 版本

  • 2011 年 9 月发布 2.0 版本,分片、复制等功能

  • 2015 年 3 月发布 3.0 版本,WiredTiger 存储引擎支持

  • 2018 年 6 月发布 4.0 版本,推出 ACID 事务支持,成为第一个支持强事务的 NoSQL 数据库

MongoDB 适用于哪些场景

1、需要处理大量的低价值数据,且对数据处理性能有较高要求

所谓低价值就是如果数据丢失也不会带来多大影响。

比如,银行交易系统就属于高价值数据。

比如,对微博数据的处理就不需要太高的事务性,但是对数据的存取性能有很高的要求,这时就非常适合使用 MongoDB。

2、需要借助缓存层来处理数据

因为 MongoDB 能高效的处理数据,所以非常适合作为缓存层来使用。将 MongoDB 作为持久化缓存层,可以避免底层存储的资源过载。

比如将用户登陆后的 session 会话信息存储到 MongoDB 中。

3、需要高度的伸缩性

对关系型数据库而言,当表的大小达到一定数量级后,其性能会急剧下降。这时可以使用多台 MongoDB 服务器搭建一个集群环境,实现最大程度的扩展,且不影响性能。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值