目录
NoSOL(Not Only SOL),意思是”不仅仅是SQL”,指的是非关系型数据库,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
随着互联网的飞速发展与普及,网民上网冲浪时所产生数据也逐日增多,从GB到TB到PB。这些数据有很大一部分都是由关系型数据库管理系统(RDBMS)来进行处理的。
由于关系型数据库的范式约束、事务特性、磁盘IO等特点,若服务器便用关系型数据库,当有大量数据产生时,传统的关系型数据库已经无法满足快速查询与插入数据的需求。NoSQL的出现解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,获取性能上的提升。但是,在某些特定场景下NoSQL任然不是最佳人选,比如一些绝对要有事务与安全指标的场景。
NoSQL是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
1.键值(Key-Value)存储
特点:键值数据库就像传统语言中使用的哈希表。通过Key添加、查询或者删除数据。
优点:查询速度快。
缺点:数据无结构化,通常只被当作字符串或者二进制数据存储。
应用场景:内容缓存、用户信息比如会话、配置信息、购物车等,主要用于处理大量数据的高访问负载。
NoSQL代表:Redis、Memcached...
2.文档(Document-Oriented)存储
特点:文档数据库将数据以文档的形式储存,类似JSON,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。
优点:数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构。
缺点:查询性能不高,缺乏统一的查询语法。
应用场景:日志、Web应用等。
NoSQL代表:MongoDB、CouchDB...
3.列(Wide Column Store/Column-Family)存储
特点:列存储数据库将数据储存在列族(Column Family)中,将多个列聚合成一个列族,键仍然存在,但是它们的特点是指 向了多个列。举个例子,如果我们有一个Person类,我们通常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年 龄就会被放入一个列族中,而薪资则在另一个列族中。
优点:列存储查找速度快,可扩展性强,更容易进行分布式扩展,适用于分布式的文件系统,应对分布式存储的海量数据。
缺点:查询性能不高,缺乏统一的查询语法。
应用场景:日志、分布式的文件系统(对象存储)、推荐画像、时空数据、消息/订单等。
NoSQL代表:Cassandra、HBase...
4.图形(Graph-Oriented)存储
特点:图形数据库允许我们将数据以图的方式储存。
优点:图形相关算法。比如最短路径寻址,N度关系查找等。
缺点:很多时候需要对整个图做计算才能得出需要的信息,分布式的集群方案不好做,处理超级节点乏力,没有分片存储机 制,国内社区不活跃。
应用场景:社交网络,推荐系统等。专注于构建关系图谱。
NosQL代表:Neo4j、Infinite Graph...
1.优点
2.缺点
3.总结
NoSQL数据库在以下几种情况下比较适用:
Mongo并非芒果(Mango)的意思,而是源于Humongous(巨大的;庞大的)一词。
MongoDB是一个基于分布式文件存储的NoSQL数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系数据库的。
MongoDB使用BSON(Binary JSON)对象来存储,与JSON格式的键值对(key/value)类似,字段值可以包含其他文档,数组 及文档数组。支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系型数据库单表查询的绝大 部分功能,而且还支持对数据建立索引。
mongodb中的库就类似于传统关系型数据库中库的概念,用来通过不同库隔离不同应用数据。 mongodb中可以建立多个数据库。每一个库都有自己的集合和权限,不同的数据库也放置 在不同的文件中。默认的数据库为”test”,数据库存储在启动指定的data目录中。
集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表的概念。 集合存在于数据库中,一个库中可以创建多个集合。每个集合没有固定的结构,这意味着你 在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的 关联性。
集合中一条条记录,是一组键值(key-value)对(即BSON)。MongoDB的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是MongoDB非常突出的特点。
本次在CentOS 7 中安装 MongoDB
- [root@sql ~]# tar -zxvf mongodb-linux-x86_64-rhel70-5.0.10.tgz
- [root@sql ~]# mv mongodb-linux-x86_64-rhel70-5.0.10 /usr/local/mongodb
- [root@sql ~]# cd /usr/local/mongodb/
- [root@sql mongodb]# ls
- bin LICENSE-Community.txt MPL-2 README THIRD-PARTY-NOTICES
- [root@sql mongodb]# ls bin/
- install_compass mongo mongod mongos
-
- # bin 目录用来存放启动 MongoDB 的服务以及客户端链接的脚本文件等
创建用于存放数据和日志的文件夹:
- #创建存放数据的目录
- mkdir -p /usr/local/mongodb/data/db
-
- #创建存放日志的目录
- mkdir -p /usr/local/mongodb/logs
-
- #创建日志记录文件
- touch /usr/local/mongodb/logs/mongodb.log
MongoDB的默认启动方式为前台启动。所谓的前台启动就是MongoDB启动进程后会占用当前的终端窗口。
- [root@sql ~]# cd /usr/local/mongodb/
-
- [root@sql mongodb]# bin/mongod --dbpath /usr/local/mongodb/data/db/ --logpath /usr/local/mongodb/logs/mongodb.log --logappend --port 27017 --bind_ip 0.0.0.0
---dbpath:指定数据文件存放目录
--logpath:指定日志文件,注意是指定文件不是目录
--logappend:便用追加的方式记录日志
--port:指定端口,默认为27017
--bind_ip:绑定服务IP,若绑定127.0.0.1,则只能本机访问,默认为本机地址
所谓的后台启动就是以守护进程的方式启动MongoDB。命令中添加--fork 即可。
[root@sql mongodb]# bin/mongod --dbpath /usr/local/mongodb/data/db/ --logpath /usr/local/mongodb/logs/mongodb.log --logappend --port 27017 --bind_ip 0.0.0.0 --fork
通过命令启动的方式并不适合管理,毕竟每次输入命令都需要考虑各参数的配置。我们可以通过配置文件来配置启动参数,然后通过指定配置文件的方式启动服务,这样在管理MongoDB上就比较方便了。
- [root@sql mongodb]# vim bin/mongodb.conf
-
- #数据文件存放目录
- dbpath = /usr/local/mongodb/data/db
- #日志文件存放目录
- logpath = /usr/local/mongodb/logs/mongodb.log
- #以追加的方式记录日志
- logappend = true
- #端口默认为27017
- port = 27017
- #对访问IP地址不做限制,默认为本机地址
- bind_ip =0.0.0.0
- #以守护进程的方式启用,即在后台运行
- fork = true
-
- # 启动 mongodb
- [root@sql mongodb]# bin/mongod -f bin/mongodb.conf
- about to fork child process, waiting until server is ready for connections.
- forked process: 7842
- child process started successfully, parent exiting
- [root@sql mongodb]# ps -ef | grep mongodb
- root 7842 1 5 15:52 ? 00:00:01 bin/mongod -f bin/mongodb.conf
- root 7904 7227 0 15:52 pts/0 00:00:00 grep --color=auto mongodb
-
- # 结束进程
- [root@sql mongodb]# bin/mongod -f bin/mongodb.conf --shutdown
- killing process with pid: 7842
可以通过 bin 目录中的 mongo 来访问 MongoDB 服务器。
- [root@sql mongodb]# vim /etc/profile
- # 在最后面添加
- export MONGODB_HOME=/usr/local/mongodb
- export PATH=$PATH:$MONGODB_HOME/bin
-
- [root@sql mongodb]# source /etc/profile
-
- # 启动mongodb
- [root@sql ~]# mongod -f /usr/local/mongodb/bin/mongodb.conf
-
- # 进入mongodb
- [root@sql ~]# mongo
-
- # 设置mongodb服务开机自启
- [root@sql ~]# vim /etc/rc.local
- /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/mongodb.conf
-
- [root@sql ~]# chmod +x /etc/rc.d/rc.local