关系数据库与非关系型数据库介紹
- 关系型数据库是一个结构化的数据库 创建在关系模型基础上, 一般面向于记录 它借
助于集合代数等数学概念和方法来处理数据库中嘚数据, 关系模型就是指二维表格模型,
因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。 现实世界中 各
种实體与实体之间的各种联系都可以用关系模型来表示。 SQL 语句(标准数据查询语言) 就
是一种基于关系型数据库的语言 用于执行对关系型数據库中数据的检索和操作。
-
储方式、 存储结构以及使用的场景都是完全不同的 所以我们认为它是一个非关系型数据库
的集合, 而不是像關系型数据库一样 是一个统称。 换言之 除了主流的关系型数据库以外
的数据库, 都认为是非关系型的 NoSQL 数据库凭借着其非关系型、 分咘式、 开源和横向扩
展等优势, 被认为是下一代数据库产品
非关系型数据库产生背景
- 关系型数据库已经诞生很久了, 而且我们一直在使鼡 没有什么问题。 面对这样的情况
为什么还会产生 NoSQL? 那么 下面我们就来介绍一下 NoSQL 产生的背景。
随着 Web2.0 网站的兴起 关系型数据库在应對 Web2.0 网站, 特别是海量数据和高并发
暴露出很多难以解决的问题
-
Web2.0 网站会根据用户的个性化信息来实时生成动态页面和提供动态信息, 因此 无
法使用动态页面静态化技术。 所以数据库的并发负载非常高 一般会达到 10000 次/s 以上
的读写请求。 关系型数据库对于上万次的查询请求还昰可以勉强支撑的 当出现上万次的写
数据请求, 硬盘 IO 就已经无法承受了 对于普通的 BBS 网站, 往往也会存在高并发的写数
据请求 如明星麤晗在微博上公布恋情, 结果因为流量过大而引发微博瘫痪 -
Huge Storage——对海量数据高效存储与访问需求
Friendfeed,一个月就会产生 2.5 亿条用户动态信息, 对於关系型数据库来说 在一个包含
2.5 亿条记录的表中执行 SQL 查询, 效率是非常低的 -
在 Web 架构中, 数据库是最难进行横向扩展的 当应用系统的鼡户量与访问量与日俱增
时, 数据库是没办法像 Web 服务一样 简单地通过添加硬件和服务器节点来扩展其性能和负
载能力的。 尤其对于一些需要 24 小时对外提供服务的网站来说 数据库的升级与扩展往往
伴随着停机维护与数据迁移, 其工作量是非常庞大的
关系型数据库和非关系型数据库都有各自的特点与应用场景, 两者的紧密结合将会给
web2.0 的数据库发展带来新的思路 让关系数据库关注在关系上, 非关系型数据庫关注在
存储上 例如, 在读写分离的 MySQL 数据库环境中,可以把经常访问的数据存储在非关系型
数据库中 提升访问速度。
-
数据库 Redis 基于内存運行并支持持久化, 采用 key-value(键值对) 的存储形式 是目
- Redis 服务器程序是单进程模型也就是在一台服务器仩可以同时启动多个 Redis 进程,而
Redis 的实际处理速度则是完全依靠于主进程的执行效率 若在服务器上只运行一个Redis 进程,当多个客户端同时访问時 服务器的处理能力是会有一定程度的下降; 若在同一台服务器上开启多个 Redis 进程, Redis 会提高并发处理能力的同时会给服务器的 CPU 造成很大压仂 也就是说在实际生产环境中, 需要根据实际的需求来决定开启多少个 Redis进程 若对高并发要求更高一些, 可能会考虑在同一台服务器上開启多个进程; 若 CPU 资源比较紧张 采用单进程即可。
前分布式架构中不可或缺的一环。
- 具有极高的数据读写速度 数据读取的速度最高可达到 110000 次/s, 数据写入速度最
- 支持数据嘚持久化 可以将内存中的数据保存在磁盘中, 重启的时候可以再次加载进行
- 原子性 Redis 所有操作都是原子性的。
- 支持数据备份 即 master-salve 模式的數据备份。
Redis数据库的基本操作
- get: 获取数据 基本的命令格式为 get key。
-
在Redis数据库中与 key 相关的命令主要包含以下几种:
-
使用 keys 命令可以取符合规则嘚键值列表, 通常情况可以结合*、 等选项来使用
-
exists 命令可以判断键值是否存在。存在为1不存在为0。
-
del命令可以删除当前数据库的指定key
-
rename 命囹进行重命名时, 无论目标 key 是否存在都进行重命名 且源 key 的值会覆盖目
标 key 的值。 在实际使用过程中 建议先用 exists 命令查看目标 key 是否存在, 然後再决
定是否执行 rename 命令 以避免覆盖重要数据。
- 重新进入数据库默认进入[0]数据库,并查看
以字节的形式指定 SET/GET 值的数据大小。 |
以 CSV 格式输絀 |
生成循环, 永久执行测试 |
仅运行以逗号分隔的测试命令列表。 |
- Redis 软件提供了多个命令工具 当 Redis 安装时, 所包含的软件工具会同时被安裝到
系统中 在系统中可以直接使用。 这些命令工具的作用分别如下所示
用于检测 Redis 在本机的运行效率 |
修复 AOF 持久化文件 |
修复 RDB 持久化文件 |
- Redis 主配置文件为/etc/redis/6379.conf, 由注释行与设置行两部分组成 与大多数Linux 配置文件一样, 注释性的文字以“#” 开始 包含了对相关配置内容进行的说明和解釋。 除了注释行与空行以外的内容即为设置行 可根据生产环境的需求调整相关参数。
- 当客户端闲置多长时间后关闭连接 如果指定为 0, 表示关闭该功能
- 设置同一时间最大客户端连接数, 默认为 10000 Redis可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数, 如果设置 maxclients 0 表示不限制。 当客户端连接数到达限制时 Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息。
- 指定存储至本地数据库时是否压缩数据 默认為 yes,Redis 采用 LZF 压缩 如果为了节省 CPU 资源, 可以关闭该选项 但会导致数据库文件变的巨大。
- 指定Redis最大内存限制Redis在启动时会把数据加载到内存Φ, 达到最大内存后Redis 会先尝试清除已到期或即将到期的 Key, 当此方法处理后仍然到达最大内存设置,将无法再进行写入操作但仍然可鉯进行读取操作。Redis新的vm机制会把Key存放内存,Value会存放在swap区
- 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘如果不开启,可能会在断电时导致一段时间内的数据丢失因为redis本身同步数据文件是按上面 save 条件来同步的,所以有的数据会在一段時间内只存在于内存中默认为no。
-
no:表示等操作系统进行数据缓存同步到磁盘(快)
always:表示每次更新操作后手动调用 fsync()将数据写到磁盘(慢 安全)
everysec:表示每秒同步一次(中等, 默认值) - 指定包含其它的配置文件 可以在同一主机上多个 Redis实例之间使用同一份配置文件。