MongoDB学习(—)基础知识
1.初识NoSql
1.1关系型数据库
关系型数据库:以行和列来存储数据=>称为表。关系型数据库中,表都是存储格式化结构的数据。
1.2非关系型数据库
1.2.1概念
NoSql,Not only Sql,意为“不仅仅是sql”,泛指非关系型的数据库。非关系数据库以键值对存储,它的结构不固定.
1.2.2分类
分类 |
Examples举例 |
典型应用场景 |
数据模型 |
优点 |
缺点 |
键值(key-value) |
Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB |
内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。 |
Key 指向 Value 的键值对,通常用hash table来实现 |
查找速度快 |
数据无结构化,通常只被当作字符串或者二进制数据 |
列存储数据库 |
Cassandra, HBase, Riak |
分布式的文件系统 |
以列簇式存储,将同一列数据存在一起 |
查找速度快,可扩展性强,更容易进行分布式扩展 |
功能相对局限 |
文档型数据库 |
CouchDB, MongoDB |
Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容) |
Key-Value对应的键值对,Value为结构化数据 |
数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构 |
查询性能不高,而且缺乏统一的查询语法。 |
图形(Graph)数据库 |
Neo4J, InfoGrid, Infinite Graph |
社交网络,推荐系统等。专注于构建关系图谱 |
图结构 |
利用图结构相关算法。比如最短路径寻址,N度关系查找等 |
很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。 |
1.2.3 RDBMS 与 MongoDB 对应的术语
1.2.4Mongodb与Mysql的操作命令的对比
1.2.5关系与非关系型数据库的对比
关系型数据库和非关系型数据库的特性、优点、缺点及应用场景对比如下:
|
特性 |
优点 |
缺点 |
关系型数据库 |
1.采用关系模型来组织数据 2.事务的一致性 3. 一个关系型数据库是由关系模型(即二维表格模型)及其之间的关联关系组成的一个数据组织 |
1.容易理解。二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更易理解 2.使用方便。标准的sql语言使得操作关系数据库非常方便 3.易于维护。丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大降低了数据冗余和数据不一致的概率。 4.支持Sql及事务处理。可以进行复杂查询,事务支持使得其能保证数据一致性 |
1.读写性能差。为了维护数据一致性所付出的巨大代价就是其读写性能比较差 2.高并发读写需求 3.海量数据高效率读写 4.固定的表结构。不擅长为有数据的表做索引或表结构的变更 |
非关系型(NoSql) |
1.以键值对存储 2.分布式 3.一般不支持ACID特性(即数据库事务特性:原子性、一致性、隔离性、持久性) 4.NoSql严格上讲不是一种数据库,应该是一种数据结构化存储方法的集合 |
1.灵活的数据存储模型。数据结构不固定 2.易扩展。数据之间无耦合,非常容易扩展 3. 高性能。能够适应现代网络对数据库高并发读写请求以及对海量数据的高速访问能力,得益于它的无关系性 4.高可用。在不太影响性能的情况,就可以方便的实现高可用的架构。比如Cassandra,HBase模型,通过复制模型也能实现高可用。 |
1. 不提供对SQL的支持。Sql是工业标准,不支持sql将对用户产生一定的学习和迁移成本 2. 应用局限性。大多数NoSql数据库都不支持事务,现有产品功能不够完善,附加功能如Bi和报表等也不支持 3.现有产品不成熟。缺乏类似关系型数据库所具有的强有力的理论、技术、标准规范(如sql)等支持。 |
2.初识MongoDB
2.1简介
MongoDB属于NoSql的一种,且是属于NoSql中的基于分布式文件存储的文档型数据库。由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson(是一种类json的一种二进制形式的存储格式,简称Binary JSON)格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
2.2概念
Ø 文档是mongodB中数据的基本单元,非常类似于数据库中的行;
Ø 集合collection可以看做是一个用于动态模式(dynamic schema)的表;
Ø mongodb的一个实例可以拥有多个独立的数据库,每个数据库拥有自己的集合;
Ø 每个文档都有一个特殊的键“_id”,这个键在文档所属的集合中是唯一的;
Ø mongodb自带一个javascript shell,用于管理mongodb的实例或者数据操作。
2.3数据模型
一个MongoDB 实例可以包含一组数据库,一个DataBase 可以包含一组Collection(集合),一个集合可以包含一组Document(文档)。一个Document包含一组field(字段),每一个字段都是一个key/value pair。
key: 必须为字符串类型。
value:可以包含如下类型
1)基本类型,例如,string,int,float,timestamp,binary 等类型。
2)一个document。
3)数组类型
2.4使用原理
所谓“面向集合”(Collection-Oriented),意思是数据被分组存储在数据集中,被称为一个集合(Collection)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。Nytro MegaRAID技术中的闪存高速缓存算法,能够快速识别数据库内大数据集中的热数据,提供一致的性能改进。
模式自由(schema-free),意味着对于存储在MongoDB数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized Document Format)。
3. MongoDB INSTALL
# Start MongoDB as a daemon on port 27017
port = 27018
fork = true # daemonize it !
journal = true #
#rest = true
logappend = true
#auth = true
dbpath = /opt/percona/mongodb/data/
logpath = /opt/percona/mongodb/logs/mongod.log
pidfilepath = /opt/percona/mongodb/mongod.pid
[email protected]:[/root]
- vi /etc/profile
- export MONGODB_HOME=/usr/local/mongodb
- export PATH=$PATH:$MONGODB_HOME/bin
保存后,重启系统配置source /etc/profile