NoSQL 之 MongoDB - 01 NoSQL 和 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 服务器搭建一个集群环境,实现最大程度的扩展,且不影响性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值