NoSQL~从入门到入坑~分布式理论基础。
分布式理论基础。
文章目录
所有天上飞的理念,都有对应的落地实现。
Redis 是一种非关系型数据库。
先来说说非关系型数据库 NoSQL。
NoSQL。
why NoSQL?
单机 MySQL 的美好年代。
在 1900s,一个网站的访问量一般不大,用单个数据库完全可以应付。在那个时候,更多的是静态页面,动态交互类型的网站不多。
数据库瓶颈。
- 数据量的总大小一个机器放不下。
- 数据的索引(B+ Tree)一个机器的内存放不下。
- 访问量(读写混合)一个实例不能承受。
↓ ↓ ↓ 进化。
Memcached(缓存)+ MySQL + 垂直拆分。
随着访问量 ↑,几乎大部分使用 MySQL 的构架网站都开始出现性能问题,Web 程序不再仅仅专注在功能上,同时也在追求性能。程序员们开始大量使用缓存技术来缓解数据库的压力,优化数据库的
结构
和索引
。开始比较流行的是通过文件缓存来缓解数据库压力。但是当访问量继续增大时,多台 web 机器通过文件缓存不能共享,大量的小文件缓存也带来了比较高的 IO 压力。在这个时候,Memcached 就自然的成为一个非常时尚的技术产品。
MySQL 主从读写分离。
分库分表 + 水平拆分 + MySQL 集群。
↓ ↓ ↓ 进化。
Nginx。
↓ ↓ ↓
NoSQL~Not Only SQL。
- 易扩展。
这一类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
- 大数据量高性能。
NoSQL 数据库具有非常高的读写性能,尤其在 大数据量下,同样表现优秀。
这得益于 ta 的无关系型。数据库的结构简单。
一般 MySQL 使用 Query Cache。每次表的更新 Cache 就失效,是一种大粒度的 Cache。
在针对 Web 2.0 交互频繁的应用,Cache 性能不高,而 NoSQL 的 Cache 是记录级的,是一种细粒度的 Cache,所以 NoSQL 在这个层面上来说性能就高很多了。
~
一秒钟 8 万(写),11 万(读)。
- 多样灵活的数据类型。
NoSQL 无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。
而在关系数据库中,增删字段是一件非常麻烦的事情。如果是大量数据的表,增删字段简直就是一个噩梦。
- RDBMS vs NoSQL。
面试重点:KV,Cache,Persistence。
3V + 3高。
大数据时代的 3V。
海量 Volume
多样 variety
实时 Velocity
互联网需求的 3 高。
高并发。
高可扩。
高性能。
当下的 NoSQL 经典应用。
-
sql 和 nosql 一起使用。
-
阿里巴巴中文站商品信息如何存放。
NoSQL 数据模型。
NoSQL 的四大分类。
KV 键值对。
- 新浪:BerkeleyDB + Redis。
- 美团:Redis + Tair。
- 阿里、百度:Memcache + Redis。
文档型数据库。(bson 格式较多)。
CouchDB。
MongoDB。(C++ 编写的基于分布式文件存储的数据库)。
列存储数据库。
- Cassandra,HBase。
- 分布式文件系统。
图关系数据库。
ta 不是放图形的,放的是关系。
eg. 朋友圈社交网络、广告推荐系统。
用于社交网络、推荐系统等。专注于构建关系图谱。
Neo4J,InfoGrid。
- 对比。
分布式数据库中 CAP 原理 CAP + BASE。
传统的 ACID。
A(Atomicity)。原子性。
C(Consistency)。一致性。
I(Isolation)。独立性。
D(Durability)。持久性。
CAP。(3 选 2)。
一个分布式系统不可能同时满足 3 者。
Consistency。强一致性。
Availability。高可用性。
Partition Tolerance。分区容错性。
CA~传统 Oracle 数据库。
上下班打卡包括上班和下班。
数据库事务,要么一起提交,要么一起回滚。
AP~大多数网站构架的选择。
双 11 时,Consistency,强一致性
,浏览量只要有人点击就 +1。很难保证。用户也不关心浏览量。
CP~Redis,MongoDB。
BASE。
BASE may be explained in contrast to another design philosophy - Atomicity, Consistency, Isolation, Durability (ACID). The ACID model promotes consistency over availability, whereas BASE promotes availability over consistency.
~ techopedia。
基本思想:通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上的改观。