MongoDB基础理解

NoSQL是什么

最常见的数据库可以分为下面的两种类型:

  • RDBMS(关系型数据库):常见的关系型数据库有 Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL;
  • NoSQL(非关系型数据库):常见的非关系型数据库有 MongoDB、Redis、Voldemort、Cassandra、Riak、Couchbase、CouchDB 等。

相对于 RDBMS(关系型数据库),NoSQL 具有以下优点:

  • 易扩展:NoSQL 数据库种类繁多,但它们都有一个共同的特点,那就是都去掉了关系型数据库的关系型特性,数据与数据之间没有关系,这样就非常容易扩展,无形之间也在架构的层面上带来了可扩展的能力;
  • 大数据量,高性能:NoSQL 数据库都具有非常高的读写性能,尤其是在处理庞大数据时表现优秀;
  • 灵活:NoSQL 随时都可以存储任意类型的数据,无须提前为要存储的数据建立字段;
  • 高可用:NoSQL 在不太影响性能的情况下,就可以方便地实现高可用的架构,比如 Cassandra、HBase 模型,通过复制模型也能实现高可用。

为什么使用 NoSQL?

随着互联网的不断发展,传统的关系型数据库在处理超大规模数据以及开发高并发应用时已经显得力不从心了,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的问题,特别是大数据应用的难题。

体系框架

NoSQL 整体框架分为四层,由下至上分别为数据持久层(data persistence)、整体分布层(data distribution model)、数据逻辑模型层(data logical model)、和接口层(interface),层次之间相辅相成,协调工作。

1、数据持久层

数据持久层定义了数据的存储形式,主要包括基于内存、硬盘、内存与硬盘相结合、订制可插拔四种形式。

  • 基于内存形式的数据存取速度最快,但可能会造成数据丢失;
  • 基于硬盘的数据可能保存很久,但存取速度较基于内存的形式慢;
  • 内存和硬盘相结合的形式,结合了前两种形式的优点,既保证了速度,又保证了数据不丢失;
  • 订制可插拔则保证了数据存取具有较高的灵活性。

2、数据分布层

数据分布层定义了数据是如何分布的,相对于关系型数据库,NoSQL 可选的机制比较多,主要有三种形式:

  • CAP 支持:可用于水平扩展;
  • 多数据中心支持:可以保证在横跨多数据中心时也能够平稳运行;
  • 动态部署支持:可以在运行着的集群中动态地添加或删除节点。

3、数据逻辑层

数据逻辑层表述了数据的逻辑表现形式,与关系型数据库相比,NoSQL 在逻辑表现形式上相当灵活,主要有四种形式:

  • 键值模型:这种模型在表现形式上比较单一,却有很强的扩展性;
  • 列式模型:这种模型相比于键值模型能够支持较为复杂的数据,但扩展性相对较差;
  • 文档模型:这种模型对于复杂数据的支持和扩展性都有很大优势;
  • 图模型:这种模型的使用场景不多,通常是基于图数据结构的数据定制的。

4、接口层

接口层为上层应用提供了方便的数据调用接口,提供的选择远多于关系型数据库。接口层提供了五种选择,分别是 Rest、Thrift、Map/Reduce、Get/Put 和特定语言 API,使得应用程序在与数据库交互时更加方便。

NoSQL 分层架构并不代表每个产品在每一层只有一种选择。相反,这种分层设计提供了很大的灵活性和兼容性,每种数据库在不同层面可以支持多种特性。

MongoDB是什么

MongoDB 是一个开源的、可扩展的、跨平台的、面向文档的非关系型数据库,它由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

在 MongoDB 中支持以类似 json 的 bson(一种计算机数据交换格式)格式来存储数据,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象语言中函数调用,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还可以对数据建立索引。

为什么要使用 MongoDB

  1. 面向文档:由于 MongoDB 是 NoSQL 类型的数据库,它不是像关系类型数据库那样以固定的格式存储数据,而是将数据存储在文档中,这使 MongoDB 非常灵活,可以适应实际的商业环境和需求;
  2. 临时查询:MongoDB 支持按字段、范围和正则表达式查询并返回文档中的数据;

  3. 索引:可以创建索引以提高 MongoDB 中的搜索性能,文档中的任何字段都可以建立索引;

  4. 复制:MongoDB 支持高可用性的副本集。副本集由两个或多个 MongoDB 数据库实例组成,每个副本集成员可以随时充当主副本或辅助副本的角色,主副本是与客户端交互并执行所有读/写操作的主服务器。辅助副本使用内置复制维护主副本种的数据。当主副本失败时,副本集将自动切换到辅助副本,然后将辅助副本作为主服务器;

  5.  负载平衡:MongoDB 可以在多台服务器上运行,以平衡负载或复制数据,以便在硬件出现故障时保持系统正常运行。

适用场景

        MongoDB 的主要目标是在键/值存储方式和传统的 RDBMS(关系型数据库)系统之间架起一座桥梁,它集两者的优势于一身。根据官方网站的描述,MongoDB 适用于以下场景

  1. 网站数据:MongoDB 非常适合实时的插入、更新与查询数据,并具备网站实时存储数据所需的复制及高度伸缩的特性;
  2.  缓存:由于性能很高,MongoDB 也适合作为信息基础设施的缓存层,在系统重启之后,由 MongoDB 搭建的持久化缓存层可以避免下层的数据源过载;

  3. 庞大的、低价值的数据:使用传统的关系型数据库存取大量数据时,数据库的运行效率往往并不尽人意,而 MongoDB 的出现使这个问题迎刃而解,MongoDB 非常适合庞大数据的存储;

  4. 高伸缩性的场景:MongoDB 内置了 MapReduce 引擎,因此非常适合由数十或数百台服务器组成的数据库;

  5.  用于对象及 JSON 数据的存储:MongoDB 的 BSON 数据格式非常适合文档化格式的存储及查询。

说了这么多 MongoDB 的好处,但它也不是万能的,比如以下这几个地方就不适合使用 MongoDB:

  • 高度事务性的系统:例如银行或会计系统,传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序;
  • 传统的商业智能应用:针对特定问题的 BI(全称“Business Intelligence”,中文意思为“商业智慧或商务智能”,指用现代数据仓库技术、线上分析处理技术、数据挖掘和数据展现技术进行数据分析以实现商业价值)数据库会产生高度优化的查询方式,对于此类应用,数据仓库可能是更合适的选择;
  • 需要复杂 SQL 查询的应用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值