目录
一、NoSQL数据库介绍
1.什么是NoSQL
NoSOL(Not Only SOL),意思是”不仅仅是SQL”,指的是非关系型数据库,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
2.为什么使用NoSQL
随着互联网的飞速发展与普及,网民上网冲浪时所产生数据也逐日增多,从GB到TB到PB。这些数据有很大一部分都是由关系型数据库管理系统(RDBMS)来进行处理的。
由于关系型数据库的范式约束、事务特性、磁盘IO等特点,若服务器便用关系型数据库,当有大量数据产生时,传统的关系型数据库已经无法满足快速查询与插入数据的需求。NoSQL的出现解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,获取性能上的提升。但是,在某些特定场景下NoSQL任然不是最佳人选,比如一些绝对要有事务与安全指标的场景。
NoSQL是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
3.NoSQL vs RDBMS
4.常见的数据库排行
5.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…
6.NoSQL 的优缺点
1.优点
- 高可扩展性
- 没有标准化
- 分布式计算
- 有限的查询功能(到目前为止)
- 低成本
2.缺点
- 最终一致是不直观的程序
- 架构的灵活性,半结构化数据
- 没有复杂的关系
3.总结
NoSQL数据库在以下几种情况下比较适用:
- 数据模型比较简单
- 需要灵活性更强的IT系统
- 对数据库性能要求较高
- 不需要高度的数据一致性
- 对于给定的Key,比较容易映射复杂值的环境
二、MongoDB 介绍
1.MongoDB简介
Mongo并非芒果(Mango)的意思,而是源于Humongous(巨大的;庞大的)一词。
MongoDB是一个基于分布式文件存储的NoSQL数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系数据库的。
MongoDB使用BSON(Binary JSON)对象来存储,与JSON格式的键值对(key/value)类似,字段值可以包含其他文档,数组 及文档数组。支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系型数据库单表查询的绝大 部分功能,而且还支持对数据建立索引。
2.MongoDB 支持的语言
3.MongoDB 与关系型数据库术语对比
- 库 <DataBase>
mongodb中的库就类似于传统关系型数据库中库的概念,用来通过不同库隔离不同应用数据。 mongodb中可以建立多个数据库。每一个库都有自己的集合和权限,不同的数据库也放置 在不同的文件中。默认的数据库为”test”,数据库存储在启动指定的data目录中。
- 集合<Collection>
集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表的概念。 集合存在于数据库中,一个库中可以创建多个集合。每个集合没有固定的结构,这意味着你 在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的 关联性。
- 文档<Document>
集合中一条条记录,是一组键值(key-value)对(即BSON)。MongoDB的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是MongoDB非常突出的特点。
4.MongoDB 的特定
- 面向集合存储,易存储对象类型的数据
- 支持查询,以及动态查询
- 支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言
- 文件存储格式为BSON(一种JSON的扩展)
- 支持复制和故障恢复和分片
5.应用场景
- 游戏应用:使用云数据库MongoDB作为游戏服务器的数据库存储用户信息。用户的游戏 装备、积分等直接以内嵌文档的形式存储,方便进行查询与更新。
- 物流应用:使用云数据库MongoDB存储订单信息,订单状态在运送过程中会不断更新, 以云数据库MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出 来,方便快捷且一目了然。
- 社交应用:使用云数据库MongoDB存储用户信息以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。并且,云数据库MongoDB非常适合用来存储聊天 记录,因为它提供了非常丰富的查询,并在写入和读取方面都相对较快。
- 视频直播:使用云数据库MongoDB存储用户信息、礼物信息等。
- 大数据应用:使用云数据库MongoDB作为大数据的云存储系统,随时进行数据提取分析,掌握行业动态。
三、安装 MongoDB
本次在CentOS 7 中安装 MongoDB
1.下载 MongoDB
2.上传到Linux系统并解压
[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
3.查看安装目录
[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 的服务以及客户端链接的脚本文件等
4.创建数据/日志目录
创建用于存放数据和日志的文件夹:
#创建存放数据的目录
mkdir -p /usr/local/mongodb/data/db
#创建存放日志的目录
mkdir -p /usr/local/mongodb/logs
#创建日志记录文件
touch /usr/local/mongodb/logs/mongodb.log
5.启动 mongodb
- 前台启动
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
6.进入 mongodb
可以通过 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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/74634.html