简析三大数据库

我们为什么要学习数据库

了解数据库,我们首先需要区分一下数据库和数据仓库

数据库是一种逻辑概念,用来存储数据的仓库,侧重存储

数据仓库:从数据量来说,数据仓库要比数据库庞大的多,主要用于数据挖掘和数据分析。

在这里我们可以类比git和github,git是一个版本管理工具,而github是一个在线的仓库,你的所有代码都可以提交到这个网上仓库中,在学数据库的同时,我们其实已经学习到两个知识点。

那么,其实我们发现有很多数据库需要我们学习,为什么要学习这么多数据库,学习一种不行吗?

我们学习这些数据库,就是要将这些数据库组合起来使用,是为了提高检索速度,减少用户等待时间。

因为用户的很多信息都需要数据库来进行存储,而mysql一般是存储在硬盘上,用物理磁盘读写数据,速度相对来说比较慢,如果要提高用户的访问体验,比如最近用户的登陆信息我就存放在redis或者mongodb中,这样用户登录的话就不用等待太长时间。

用户登录账号以后,就会请求相关的信息,那么最有可能先去非关系型数据库mongodb或者redis中去查找,如果没找到,就会去持久的关系型数据库当中去查找,没有查到,那是因为信息没有录入,如果查到了相关的数据,我们就把当前查到的数据存储到redis里面去,经过客户端,再返回给用户,因为这时候我们也要考虑,别的用户是不是也要访问相关的数据信息,redis里面存储的就是经常使用的数据信息。

举个例子,大家都在12306上买过票吧,春运期间几千万的点击量,如果都要从关系型数据库mysql当中获取用户信息,服务器的压力就会超大,那么作为IT攻城狮来说,你今天没买上票,不要灰心,你的登录信息已经存在我的redis数据库当中啦,我知道你最近需要买票,下次登录就会快速进入购票页面啦,而且为了应对春运期间服务器的压力,一些固定页面的内容都直接放在redis数据库当中,比如12306网站的首页。

redis和mongodb的区别

而redis和mongodb之间的区别主要在mongodb能实现海量数据的访问效率提升,同时内置一些数据分析功能(mapreduce),redis更偏向于较小数据量的性能和运算,按照进程顺序写入,虽然支持集群,也仅限于主-从模式。

这里的主从模式我们可以这样理解,我们在实际处理数据的时候,为了降低每个redis服务器的负载,我们可以设置多个服务器一起执行任务,做主从模式,也就是一个redis服务器负责写数据,其他的服务器负责读数据,主服务器的数据也会自动的同步给其他的从服务器。

三大数据库大比拼

mysql:

安装服务端:

sudo apt-get install mysql-server

安装客户端:

sudo apt-get install mysql-client

进入服务器的命令操作

sudo /etc/init.d/mysql start 密码:tarena

进入客户端

mysql –u root –p密码

退出命令:

quit /q exit

如果命令写错用/c清理错误,而不至于退出mysql数据库

在MySQL当中,sql语句的书写不区分大小写,但是文件的名字要区分大小写,这里的命令都是以;结尾

我们知道mysql是关系型数据库,那什么是关系呢,任何事物之间的联系都叫做关系,数据库当中表与表之间的联系就是关系,也是一种数据,需要存储下来。

在数据库的查询过程中,我们会用到索引,那么什么是索引呢,索引的本质就是数据结构,是帮助MySQL高效获取数据的数据结构。

在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,这里我们讨论两个存储引擎,MyISAM和InnoDB,这两者的引擎使用的都是B+Tree作为索引结构,B+树的定义十分复杂,因此只简要地介绍B+树:B+树是为磁盘或其他直接存取辅助设备而设计的一种平衡查找树,在B+树中,所有记录节点都是按键值的大小顺序存放在同一层的叶节点中,各叶节点指针进行连接。

关于MySQL索引的数据结构和算法原理可以参照如下链接

总结一下mysql数据库中的一些简单操作:

创建数据库:create database test charset=utf8;使用数据库:use test那这时候可以在里面进行增删改查

增:

create table 表名

insert into 表名 (column1, column2, column3,...columnN) values (value1, value2, value3,...valueN);

insert into 表名 values (value1, value2, value3,...valueN);

删:

drop table 表名 整个删除

delete table 表名 还会留下表头,但表中的内容已经被删除了

update table set xx=xx,xxx=xx where xxx=xxx and xxx=xxx;

这里的修改可以在后面限定一些条件,我们也可以根据update的中文翻译来确定它的作用,修改,更新的意思。

show tables 查看有多少表

select * from 表名

select column1,column2,...columnN from 表名 where 条件1 and 条件2...and 条件N;

其实数据库的使用最常用最重要的也是查询,当然查询的话需要各种各样的条件限定,这就需要大家针对查询这一块做一个文档总结,这完全有必要,因为这一块的信息量太大了,在此不再赘述。

MongoDB:

文档型数据库,数据结构由键值对组成,适用于事件的记录,内容管理或博客平台,通过第三方平台访问和抓取数据

它的性能比较好,是因为它是C++语言编写,运行稳定,可以将不同数据结构的文档存储在同一个数据库里,尤其适合存储json文件的格式,所以一般爬虫的时候会用到。

json的数据格式在python当中叫做字典,在JavaScript中叫做Json

mongodb支持分布式,建一个集群,可以建立在多台电脑上,共同使用mongodb虽然支持内存级别的读写,也支持物理存储

因为这里面都是键值对的存储方式,所以在开始查询的时候会用到大括号,即使没有任何的条件,这里的大括号也一定要用上。

在mongodb官网上下载,安装以后既包含客户端又包含服务器端,服务端是mongod,客户端是mongo。

一般的情况下让mongodb服务器在后台启动,不会占用一个终端,只需要在终端输入:sudo service mongod restart

安装服务端:

sudo apt-get install mongodb

设置数据库端口

mongod --port 8080如果不设置默认 27017

启动服务端:

在终端输入:mongod

启动客户端:

在终端输入:mongo

退出命令:

quit /q exit

mongodb中的一些操作命令

这里的数据库语句区分大小写

展示所有数据库名字

show dbs

创建数据库

use 数据库名字

当前使用的数据库我们可以用db表示

显示当前数据库的集合

show collections

删除数据库

use mydb 这个数据库删除之前还需要选择db.dropDatabase()show dbs

创建集合

db.createCollection(集合名)

删除集合

db.集合名.drop()

删除文档

remove({})将文档从集合中永久删除

注意:

如果没有任何参数,将会把集合内的所有文档全部删除,这种情况默认状态是删除所有文档,所以必须注意

插入文档

db.集合名.insert(

同时插入多个文档,可以传递给insert()一个数列:

db.集合名.insert([,{文档2},... {文档n}])

文档里面都是键值对,中间以逗号隔开

查询文档

db.集合名.find()

用pretty()格式化的展示结果

db.集合名.find().pretty()

findOne()查询集合中的一条文档

db.集合名.findOne(),用了这条语句以后再不用加pretty()

Redis:

redis官网下载安装包

解压

tar zxvf redis-3.2.5.tar.gz

复制:推荐放到usr/local目录下

sudo mv -r redis-3.2.3/* /usr/local/redis/

进入redis目录

cd /usr/local/redis/

生成

sudo make

测试

sudo make test这段运行时间会较长

安装:将redis的命令安装到/usr/bin/目录

sudo make install

运行启动服务器:在桌面目录

redis-server按ctrl+c停止

启动客户端:在新终端中运行如下代码

redis-cli

运行命令

pingset 'a' '123'

当添加键值后,发现在当前运行的目录下,创建了一个文件:dump.rdb,这个文件用于将数据持久化存储

string

string是redis最基本的类型

最大能存储512MB数据

string类型是二进制安全的,即可以为任何数据,比如数字、图片、序列化对象等

设置键值

set key value

设置键值及过期时间,以秒为单位

SETEX key seconds value

设置多个键值

MSET key value [key value ...]

根据键获取值,如果不存在此键则返回nil

GET key

根据多个键获取多个值

MGET key [key ...]

追加值

APPEND key value

获取值长度

STRLEN key

redis数据库中键的操作类似于python当中字典的操作,我们可以简单的来看一下

查找键,参数支持正则

KEYS pattern

判断键是否存在,如果存在返回1,不存在返回0

EXISTS key [key ...]

查看键对应的value的类型

TYPE key

删除键及对应的值

DEL key [key ...]

hash

hash用于存储对象,对象的格式为键值对

列表

列表的元素类型为string按照插入顺序排序在列表的头部或者尾部添加元素

集合无序集合

元素为string类型元素具有唯一性,不重复

有序集合

元素为string类型元素具有唯一性,不重复每个元素都会关联一个double类型的score,表示权重,通过权重将元素从小到大排序,元素的score可以相同

启动redis的一些建议:

1 加上 号使redis以后台程序方式运行./redis-server &

2 启动时指定配置文件

redis-server ./redis.conf

3 使用Redis启动脚本设置开机自启动

推荐在生产环境中使用启动脚本方式启动redis服务。启动脚本redisinitscript 位于位于Redis的 /utils/ 目录下。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180808G02Y3P00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券