NoSQL数据库的安装和使用
一、熟悉Redis系统的安装和应用二、熟悉MongoDB的安装和使用三、掌握MongoDB编程实践
(一)完成
Redis
的安装和使用。完成数据库的插入,删除,以及查询。
Redis
是一个键值(key-value
)存储系统,即键值对非关系型数据库,和Memcached
类似,目前正在被越来越多的互联网公司采用。Redis
作为一个高性能的键值数据库,不仅在很大程度上弥补了memcached
这类键值存储的不足,而且在部分场合下可以对关系数据库起到很好的补充作用。Redis
提供了Python
、Ruby
、Erlang
、PHP
客户端,使用很方便。
①使用hadoop
用户登录ubuntu kylin
,在windows
系统使用FileZilla
将压缩格式的文件redis-5.0.5.tar.gz
传输保存在“/home/hadoop/下载”
目录下,现在解压包装包至路径/usr/local
下。
②将
redis-5.0.5.tar.gz
文件解压保存至“/usr/local/”
目录下。
③将redis-5.0.5
重命名为redis
,并把redis
目录的权限赋予hadoop
用户。
④进入“/usr/local/redis”
目录,输入编译和安装Redis
。
⑤已经完成Redis
的安装,现在开启Redis
服务器。
⑥新建终端,启动Redis
客户端。客户端连上服务器之后,会显示“127.0.0.1:6379>”
的命令提示符信息,表示服务器的IP
地址为127.0.0.1
,端口为6379
。现在可以执行简单的操作,比如,设置键为”hello”
,值为”world”
,并且取出键为”hello”
时对应的值。至此Redis
安装和运行成功,接下来即可操作Redis
数据库。
Redis
数据库是以<key,value>
的形式存储数据,把表的数据存入Redis
数据库时,key
和value
的确定方法如下:
* key=表名:主键值:列名
* value=列值
⑦插入数据:向
Redis
插入一条数据,只需要先设计好key
和value
,然后用set
命令插入数据即可。例如,在Course
表中插入一门新的课程“大数据”,4学分,操作命令和结果如下图所示。
⑧删除数据:Redis
有专门删除数据的命令——del
命令,命令格式为“del
键”。所以,如果要删除之前新增的课程“大数据”,只需输入命令“del Course:8:Cname”
,如下图所示,当输入“del Course:8:Cname”
时,返回“1”
,说明成功删除一条数据。
⑨查询数据:Redis
最简单的查询方式是使用get
命令。输入get
命令查询,输出为空,说明数据删除成功。
(二)
MongoDB
的安装和使用。完成
MongoDB
的基本的shell
命令。MongoDB
是一个基于分布式文件存储的数据库,介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json
的bson
格式,因此可以存储比较复杂的数据类型。Mongo
最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
①使用apt-get
命令进行在线安装MongoDB
,可以避免很多莫名其妙的问题。
命令行sudo apt-get install mongodb
可下载安装MongoDB
,默认安装的版本是MongoDB 2.6.10
,但目前MongoDB
已经升级到3.2.8
,可以通过添加软件源的方式来安装3.2.8
版本。
a.首先打开终端,导入公共key
到包管理器
b.创建MongoDB
的文件列表。
c.更新包管理器,安装MongoDB
。
d.安装完成MongoDB
以后,在终端输入以下命令查看MongoDB
版本。
②MongoDB
的启动和关闭。
③进入MongoDB
的shell
命令模式。默认连接的数据库是test
数据库,在此之前一定要确保已经启动了MongoDB
,否则会出现错误,启动之后运行成功情况如下。
④常用操作命令
数据库相关
show dbs
:显示数据库列表
show collections
:显示当前数据库中的集合(类似关系数据库中的表table
)
show users
:显示所有用户
use yourDB
:切换当前数据库至yourDB
db.help()
:显示数据库操作命令
db.yourCollection.help()
:显示集合操作命令,yourCollection
是集合名
MongoDB
没有创建数据库的命令,如果想创建一个“School”
的数据库,先运行use School
命令,之后做一些操作(如:创建聚集集合db.createCollection('teacher')
),这样就可以创建一个名叫“School”
的数据库。
⑤以一个School
数据库为例,在School
数据库中创建两个集合teacher
和student
,并对student
集合中的数据进行增删改查基本操作(集合Collection
相当于关系型数据库中的表table
)。
a. 切换到School
数据库(切换到School
数据库。MongoDB
无需预创建School
数据库,在使用时会自动创建)
b. 创建Collection
(创建一个聚集集合。MongoDB
其实在插入数据的时候,也会自动创建对应的集合,无需预定义集合)
c.与数据库创建类似,MongoDB
插入数据时也会自动创建集合。 插入数据有两种方式:insert
和save
。
插入数据成功
_id
相同,更新数据
_id
相同,插入失败,不做操作。d.添加的数据其结构是松散的,只要是
json
格式均可,列属性均不固定,根据添加的数据为准。先定义数据再插入,就可以一次性插入多条数据。
e. 运行完以上例子,
student
已自动创建,说明MongoDB
不需要预先定义collection
,在第一次插入数据后,collection
会自动的创建。
⑥查找数据
a.db.student.find()
查询所有记录。相当于:select * from student
b.
db.student.find({sname: 'zhangsan'})
查询sname='zhangsan'
的记录。相当于:select * from student where sname='zhangsan'
c.
db.student.find({},{sname:1, sage:1})
查询指定列sname
、sage
数据。相当于:select sname,sage from student
。
sname
:1表示返回sname
列,默认_id
字段也是返回的,可以添加_id:0
(意为不返回_id
)写成{sname: 1, sage: 1,_id:0}
,就不会返回默认的_id
字段了
d.
db.student.find({sname: 'zhangsan', sage: 22})
and
与条件查询。相当于:select * from student where sname = 'zhangsan' and sage = 22
e.
db.student.find({$or: [{sage: 22}, {sage: 25}]})
or
条件查询。相当于:select * from student where sage = 22 or sage = 25
f.
db.youCollection.find(criteria, filterDisplay) criteria
:
查询条件,可选filterDisplay
:筛选显示部分数据,如显示指定列数据,可选(当选择时,第一个参数不可省略,若查询条件为空,可用{}
做占位符)
⑦修改数据
db.youCollection.update(criteria, objNew, upsert, multi )
criteria: update
的查询条件,类似sql update
查询内where
后面的objNew
:update
的对象和一些更新的操作符(如$set
)等,也可以理解为sql update
查询内set
后面的。
upsert
: 如果不存在update
的记录,是否插入objNew
,true
为插入,默认是false
,不插入。
multi
:mongodb
默认是false
,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。默认false
,只修改匹配到的第一条数据。
其中criteria
和objNew
是必选参数,upsert
和multi
可选参数。db.student.update({sname: 'lisi'}
,{$set: {sage: 30}}, false, true)
相当于:update student set sage =30 where sname = 'lisi'
;
⑧删除数据
db.student.remove({sname: 'chenliu'})
相当于:delete from student where sname='chenliu'
⑨删除集合
⑩退出
shell
命令模式
输入exit
或者Ctrl+C
退出shell
命令模式
(三)使用
Java API
对MongoDB
进行访问。①
Java MongoDB Driver
驱动jar
包已经下保存至’/home/hadoop/下载/’
目录下。
②打开Eclipse
,新建Java Project
。
引入驱动包mongodb-driver-3.8.0.jar
。
新建Class Average_grade
清空Average_grade.java
里面的代码,然后在该文件中输入完整的执行集合student
的增删改查操作的代码。
程序运行结束后会在底部的“Console
”面板中显示运行结果信息。
每次执行完程序,都可以返回shell
模式查看结果。如:在eclipse
执行完更新操作后,在shell
模式输入db.student.find()
,可以查看student
集合的所有数据。
(四)
Redis
和传统的Mysql
数据库的区别在哪里?①
mysql
是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。redis
是NOSQL
,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。
②mysql
作为持久化存储的关系型数据库,相对薄弱的地方在于每次请求访问数据库时,都存在着I/O
操作,如果反复频繁的访问数据库。
第一:会在反复链接数据库上花费大量时间,从而导致运行效率过慢;
第二:反复的访问数据库也会导致数据库的负载过高,那么此时缓存的概念就衍生了出来。
③缓存就是数据交换的缓冲区(cache
),当浏览器执行请求时,首先会对在缓存中进行查找,如果存在,就获取;否则就访问数据库。缓存的好处就是读取速度快。
④redis
数据库就是一款缓存数据库,用于存储使用频繁的数据,这样减少访问数据库的次数,提高运行效率。(五)
MongoDB
有哪些特点,和Mysql
数据库的区别在哪里?特点:
Mongodb
是非关系型数据库(nosql
),属于文档型数据库。文档是mongoDB
中数据的基本单元,类似关系数据库的行,多个键值对有序地放置在一起便是文档,语法有点类似javascript
面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库。
存储方式:虚拟内存+持久化。 查询语句:是独特的Mongodb
的查询方式。 适合场景:事件的记录,内容管理或者博客平台等等。
架构特点:可以通过副本集,以及分片来实现高可用。
数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。
成熟度与广泛度:新兴数据库,成熟度较低,Nosql
数据库中最为接近关系型数据库,比较完善的DB
之一,适用人群不断在增长。区别:
MongoDB
还有一个最大的缺点,就是它占用的空间很大,在MongoDB
中频繁的进行数据增删改时,如果记录变了,例如数据大小发生了变化,这时候容易产生一些数据碎片,出现碎片引发的结果,一个是索引会出现性能问题。
MySQL
与MongoDB
都是开源的常用数据库,但是MySQL
是传统的关系型数据库,MongoDB
则是非关系型数据库,也叫文档型数据库,是一种NoSQL
的数据库。它们各有各的优点,关键是看用在什么地方。所以我们所熟知的那些SQL
(全称Structured Query Language
)语句就不适用于MongoDB
了,因为SQL
语句是关系型数据库的标准语言。
更多推荐
所有评论(0)