共计 2536 个字符,预计需要花费 7 分钟才能阅读完成。
redis 系列文章:
https://liudongdong.top/categ…
本篇起源:
https://liudongdong.top/archi…
公众号: 雨中散步撒哈拉
备注:欢送关注公众号,一起学习,共同进步!
一、数据库演进史
1. 单机 MySQL 时代
在 web 初现峥嵘的那段时间,大部分网站都是应用的单机 MySQL 来存储用户数据,因为网站的用户与访问量不会太大,甚至大部分都应用额动态网页,与后端没有过多的交互,所以单机 MySQL 足矣
然而随着 web 的倒退带来的用户群体激增,瓶颈也就随之而来了,在单机 MySQL 时代,造成瓶颈的起因次要有
- 数据量太大,一个服务器硬盘存不下
- 读写混合,一个服务器性能有余
- 数据库索引太大,内存不足
2. 垂直拆分与缓存时代
起初,随着网站访问量的回升,应用单机 MySQL 的网站开始呈现了性能问题,因而程序员们将眼光从性能转移到了性能上
为了解决单机 MySQL 时代的有余,又对 MySQL 引入了 Memcached (缓存) 和垂直拆分 (读写拆散)
等计划
一个运行中的网站其大部分工夫都是在被用户进行查问操作,如果将读写拆分到不同的数据库中,就能够进步查问效率,所以数据库有了垂直拆分的计划,也就是数据库依据作用拆分为读服务器和写服务器,并利用主从复制保证数据正确,同时利用缓存加快速度
3. 程度拆分与集群时代
读写拆散与分库分表也满足不了用户数据的存储了,这时就呈现了对服务器的程度拆分,多个主从节点组成一个集群节点,而多个集群节点就组成了集群
4. 数据爆炸时代
在现在这个信息爆炸的时代,人们对于信息的实时性要求越来越高,互联网用户同样也越来越多,因而 MySQL 等关系型数据库就不够用了,因为数据量很大,数据变动也很快
通过对第三方平台的拜访和数据抓取,能够很容易的取得用户个人信息,社交网络,用户生成的数据和用户的操作日志曾经成倍的减少,对于这些构造并不确定的数据如果想要对这些数据进行深度的开掘,那关系型数据库就曾经不再实用了
二、什么是 NoSQL
NoSQL = Not Only SQL,即泛指非关系型数据库
因为 web2.0 时代的到来,互联网用户和数据量呈几何式回升,传统的非关系型数据库很难应酬大型网站的超大数据量和高并发,这就裸露进去了很多关系型数据库难以克服的问题
因为关系型数据库从实质上来说就是一张表格,是有固定构造的,并且所有的数据都必须遵循雷同的形式进行存储
而非关系型数据库是非结构化的,数据能够以多种形式存储,即能够面向文档存储,面向图像存储,甚至面向 K-V 存储等。Java 中的 Map 就是一种经典的 “NoSQL”,因为 Object 类型能够面向任何类型的对象
1. NoSQL 的特点
- 不便扩大,数据之间没有关系
- 大数据量存储,高性能 (redis 1s 能写 8w 次,读取 11w 条)
- 数据类型多样,不须要当时设计数据库
2. RDBMS 和 NoSQL 的区别
RDBMS
- RDBMS 应用结构化组织
- DDL,DQL,DML
- 数据和关系都存在独自的表中,只能以行和列进行存储
- ACID 准则,严格一致性
- 事务
- …
NoSQL
- 没有固定的查询语言
- 存储形式多样化:键值对存储 (redis),列存储 (HBase),文档存储 (MongDB),图形数据库
- 最终一致性,只需保证数据的最终统一
- CAP 定理和 Base 实践 (异地多活)
- 高性能,高可用,高可扩
- …
在公司中,肯定是 NoSQL + RDBMS 一起应用
3. 大数据时代的要求
大数据时代有 3V 和 3 高的概念
3V 用来形容大数据时代下数据的问题:
- 海量 (volume)
- 多样 (variety)
- 实时 (velocity)
3 高指的是大数据时代,程序所须要达到的规范:
- 高可用
- 高并发
- 高性能
三、阿里巴巴架构演进
阿里从 2010 年底,开始施行第五代网站架构革新,阿里巴巴对第五代架构有如下要求
- 麻利:需要的麻利开发,利用零碎的收缩和耦合好转使得架构越来越简单,该如何放弃业务的麻利开发
- 凋谢:如何晋升网站开放性,吸引第三方开发者退出到网站的共建
- 体验:并发压力快速增长,用户对体验的要求也越来越高
1. 数据层:数据架构的日益简单
简单的数据架构图
为了进步访问速度,一个商品的不同信息就可能来自不同的数据库
- 商品根本信息:名称,商家信息等,能够存储在关系型数据库中
- 商品的形容,评论:因为这部分的文字较多,因而存储在关系型数据库中可能会导致性能降落,因而应用的是文档型数据库,如 MongDB
- 图片:分布式文件系统。淘宝的 TFS,阿里云的 OSS,google 的 GFT,Hadoop 的 HDFS,以及 FastDFS,
- 关键字搜寻:solr,elasticsearch,淘宝应用的则是 Isearch
- 商品热门的波段信息:内存数据库 redis,tair,memache
- 商品的交易,内部领取接口:第三方利用
数据的多样性就带来了很多的问题
- 数据源繁多,数据源革新导致相干利用的大面积重构
- 跨数据源定位问题艰难,缓存和性能优化难以施行
- 数据架构简单,利用须要间接依赖多种类型的数据源
- …
为了解决这些问题,阿里巴巴提出的解决形式是: 对立数据服务层 UDSL
,在网站利用集群和底层数据源之间构建一层代理,对立数据层
减少了 UDSL 后的数据架构如下
UDSL 屏蔽了底层数据库的差别,应用对立的操作语言对不同的数据库进行操作,具体细节由 UDSL 进行保护
2. 热点缓存
应用了 UDSL 后,数据架构尽管失去了大幅的简化,然而性能问题仍然很重大。网站的数据十分宏大,缓存过多数据的性价比不高,因而缓存热点数据成了最好的抉择
因而阿里巴巴开发了热点缓存平台,提供给 UDSL 作为缓存零碎
四、NoSQL 四大类型
1. KV 键值对型
以键值对模式存储数据,常见的有 Redis,Tair,Memecache
2. 文档型
传输格局多为 Bson,和 Json 相似
常见的有 MongDB,MongDB 是基于分布式文件存储的数据库,应用 C++ 编写,次要用来解决大量的文档,MongDB 是非关系型数据库中性能最丰盛,最像关系型数据库的
此外还有:CouchDB,RavenDB …… 等
3. 列存储型
常见的有 HBase,和一些分布式文件系统
4. 图关系数据库
图关系数据库并不是用来存储图片的,而是用来存储关系和构建关系图谱的,比方:社交网络,朋友圈,广告举荐等
常见的有:Neo4j,InfoGrid …… 等