概述
在关系型数据库的今天,还是主流MongoDB 是一个基于分布式的文件存储数据库,由C++语言编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。是一款为web应用程序和互联网基础设施设计的数据库管理系统。MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系型数据库的。是一个以文档为中心的NOSQL(NoSQL = Not Only SQL,意为"不仅仅是SQL"。)数据库,具备高性能、高可用性及可伸缩性等特性又称为文档数据库,主要用来存放word、图片等文档数据,它也是nosql数据的一种。支持Linux、windows系统,支持集群部署。
数据库Database)基本概念
- 数据库就是按照一定的数据结构来组织,储存和管理数据的仓库
- 我们写的程序都是在内存中运行的,一旦程序运行结束或者计算机断点,程序运行中的数据就会全部丢失;所以我们就需要将一些程序的数据持久化到键盘之中,以确保数据的安全性。
- 数据库则是大批量数据持久化的普遍选择,1.文件 2. 数据库
- 数据库分为关系数据库和非关系数据库
- 常见的关系数据库有MySql 、sql server Oracle
- 常见的非关系数据库有MongoDB
为什么都采用数据库来储存数据
- 数据库是有结构的
- 数据库可以提供各种接口,让数据处理(增删改查)快捷方便
- 各种语言提供了完善的接口
关系数据库与非关系数据库区别
- 成本:Nosql数据库(非关系型数据库)简单易部署,基本都是开源软件,不需要使用类似于Oracle数据库那样花费大成本购买使用,相比关系型数据库价格便宜。
- 查询速度:Nosql数据库将数据存于缓存之中,而且不需要经过SQL层的解析,关系型数据库将数据存储在硬盘中,自然查询速度远不及Nosql数据库。
- 存储数据的格式:Nosql的存储格式是key,value以键值对的形式、文档格式、图片格式等等,所以可以存储基础类型及对象或者集合等各种形式,而关系型数据库只支持基础类型。
- 扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。Nosql基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
- 持久存储:Nosql不适用于持久存储。
- 数据的一致性:非关系型数据库一般强调的是数据最终一致性,不像关系型数据库一样强调数据的强一致性,从非关系型数据库中读到的有可能还是处于一个中间态的数据。
- 事务处理:Nosql不提供对事务的处理。
数据库类型 | 数据存储的方式 | 存储单元 | 区别 |
ROBMS(关系型数据库) | 表(table) | 行(row) | 1.常见的有MySql 、sql server Oracle 2.特点 通过一张张表来建立联3.基本都使用SQL语言来管理数据库 |
非关系数据库(NoSQL) | 集合(collection) | 文档document | 1.没有行 、列的概念 用json类储存数据2.集合相当于“表”,文档相当于“行”3. |
什么是MongoDB
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。
为什么要使用MongoDB
- MongoDB提出的是文档、集合的概念,使用BSON(类JSON)作为其数据模型结构,其结构是面向对象的而不是二维表,MongoDB 将数据存储为一个文档(类似于 JSON 对象),数据结构由键值对组成,类似于 Java 中的 Map,通过 key 的方式访问起来效率就高得多,这使得MongoDB能在生产环境中提供高读写的能力,吞吐量较mysql和SQL数据库有大大增强。
- 易伸缩,自动故障转移。易伸缩指的是提供了分片能力,能对数据集进行分片,数据的存储压力分摊给多台服务器。自动故障转移是副本集的概念,MongoDB能检测主节点是否存活,当失活时能自动提升从节点为主节点,达到故障转移。
- 数据模型因为是面向对象的,所以可以表示丰富的、有层级的数据结构,可灵活存取。
4.MongoDB 提供了企业版(功能更强大)和社区版,对于我们开发者来说,拿社区版来学习和使用就足够了。MongoDB 的驱动包很多,常见的编程语言都有覆盖到,比如说 Java、JavaScript、C++、C#、Python 等等。
特点
任何关系数据库都有一个典型的数据结构设计,表明了表结构及表之间的关系。而在MongoDB中,没有关系的概念。
- 使用键值(Key Value)储存数据;
- MongoDB的逻辑结构是一种层次结构,主要由:文档(document)、集合(collection)、数据库(database)这三部分组成的。
- 文档(document):由键/值对构成,像{a:1};{s:”abc”}等,它是MongoDB核心单元,MongoDB的文档(document),相当于关系数据库中的一行记录。
- 集合(Collection):多个文档组成一个集合(collection),相当于关系数据库的表。
- 数据库(database):多个集合(collection),逻辑上组织在一起,就是数据库(database)。
- 一个MongoDB实例支持多个数据库(database)。
- 无固定结构 – MongoDB是一个文档数据库,一个集合中可以包含不同的文档。文档的字段数、内容和大小都可以不同。
- 关系型数据库通过主键或者外键的约束保证数据的完整性与唯一性,所以关系型数据库常用于对数据完整性较高的系统。MongoDB在这一方面是不如关系型数据库,且MongoDB没有固定的Schema,正因为MongoDB少了一些这样的约束条件,可以让数据的存储数据结构更灵活,存储速度更加快。
- 即时查询能力MongoDB保留了关系型数据库即时查询的能力,保留了索引(底层是基于B tree)的能力。这一点汲取了关系型数据库的优点,相比于同类型的NoSQL redis 并没有上述的能力。
- 复制能力MongoDB自身提供了副本集能将数据分布在多台机器上实现冗余,目的是可以提供自动故障转移、扩展读能力。
- 速度与持久性MongoDB的驱动实现一个写入语义 fire and forget ,即通过驱动调用写入时,可以立即得到返回得到成功的结果(即使是报错),这样让写入的速度更加快,当然会有一定的不安全性,完全依赖网络。MongoDB提供了Journaling日志的概念,实际上像mysql的bin-log日志,当需要插入的时候会先往日志里面写入记录,再完成实际的数据操作,这样如果出现停电,进程突然中断的情况,可以保障数据不会错误,可以通过修复功能读取Journaling日志进行修复。
- 数据扩展MongoDB使用分片技术对数据进行扩展,MongoDB能自动分片、自动转移分片里面的数据块,让每一个服务器里面存储的数据都是一样大小。
- 单个对象的结构是清晰的。
- 没有复杂的表连接。
- 查询功能强大。MongoDB的查询功能几乎与SQL一样强大,使用基于文档的查询语言,可以对文档进行动态查询。
- 易于调优。
- 易于扩展。
- 应用程序对象与数据库对象天然对应。
- 使用内存存储工作集,可以更快地访问数据。
- 数据模型比较简单
- 需要灵活性更强的后台系统
- 对数据库性能要求比较高
- 不需要高度的数据一致性
与关系数据库区别
关系型数据库比较结构化,操作不是很灵活,菲关系型数据库操作灵活,但不适合大型数据存储,比较适合微架构,两者是相辅相成的关系