NoSQL(简介、历史)

NoSQL

为什么使用 NoSQL

1. 单机 MySQL 的网站

APP----->DAL------>MySQL

90 年代:一个基本的网站访问量一般不会很大,单个数据库完全足够。

那个时候,更多的去使用静态网页 HTML --- - 服务器没有太大的压力

这种情况下,整个网站的瓶颈是什么?

1. 数据量太大,一台机器放不下了。

2. 数据的索引(300 万就一定要建立索引)B+Tree,一个机器内存也放不下

3. 访问量(读写混合),一个服务器承受不了

只要你发现出现这三种,必学晋级:

2.Memcached+MySQL+ 垂直拆分(分库分表)

APP------>DAL------->MySQL(1)MySQL--(2 写内容)---MySQL(3)

1.3 读 2 写(读写分离)

网站 80% 都是在读,每次要查询数据库十分麻烦, 减轻服务器的压力,使用缓冲提高效率

APP------>DAL----cache--->MySQL(1)MySQL--(2 写内容)---MySQL(3)

发展方式:

优化数据结构和索引 -------> 文件缓冲 (IO)---------->Memcached(当时火热的技术)

3. 分库分表 + 水平拆分 +MySQL 集群

​ 集群 1:M---(S--S)

APP----DAL-------cach-- 集群 2:M---(S--S)

​ 集群 3:M---(S--S)

本质是:数据库(读、写)

早些年:MyISAM: 表锁(100 万张三 -- 密码)十分影响效率!高并发有严重问题

转战 Innodb:行锁

慢慢的就开始分库分表解决写的压力 MySQL 提供了表分区(这个没有多少公司使用),MySQL 的集群

如今年代

技术爆炸,2010 年 ---2022 年,世界翻天覆地的变化(定位,音乐,...)

MySQL 数据库不能用了,数据量大,变化很快!!

(浏览量 10w+ 固定时间后才持久化)

MySQL 有的使用它来储存一些比较大的文件,博客,图片!!数据库表很大,数据库的效率低了!如果有一种数据库来专门处理这种数据,MySQL 压力就变的十分小了(研究如何处理问题!!)大数据的 IO 压力下,表几乎没法更大!

目前一个基本的互联网项目

​ MySQL 01 缓存

1 用户 负载均衡主机 APP 服务器 1 MySQL 02 移动信息服务器

2 用户 -- 企业防火墙 == APP 服务器 2 MySQL 03 Hadoop 集群

3 用户 负载均衡备机 APP 服务器 3 MySQL 04 实时通信服务

群发服务器 图片服务器 文件服务器 MySQL 05 流媒体服务器

为什么要 NoSQL!

用户的个人信息、社交网络、地理信息、用户自己产生的数据、用户日志的爆发式增长

什么是 NoSQL

not only sql(不仅仅是 SQL)

关系型数据库:

  • 行和列来记录(POI)技术操作 EXCEL 表

泛指非关系型数据库,随着 java 分布式时代!音乐、尤其是大规模高并发的社区暴露很多难以克服的问题

NoSQL 在当今大数据环境下,Redis 是必须是掌握的。

很多的用户的个人信息、社交网络、地理信息、用户自己产生的数据、用户日志,这些数据类型的存储不需要一个固定的格式,不需要多月的操作就可以横向扩展。Map<String ,Object>

NoSQL 的特点:

1. 方便扩展(数据之间没有关系,很好扩展)

2. 大数据量高性能(Redis 一秒可以写 8 万次,读 11 万次,NoSQL 的缓存记录级别,是一种细粒度的缓存,性能会比较高)

3. 数据类型是多样型的(不需要事先设计数据库!随取随用,如果数据库的表是大的就没法设计了)

4. 传统的 RDBMS 关系型数据库于 NoSQL:

传统的CRUD
--结构化组织
--SQL
--数据和关系都存在单独的表中 row col
--操作操作,数据定义语言
--基础的事务
--不仅仅是数据
NoSQL
-- 不仅仅是数据
-- 没有固定的查询语言
-- 键值对储存,列存储,文档存储,图形数据库(社交关系)
-- 最终一致性
--CAP 定理和 BASE (异地多活)初级架构师
-- 高性能,高可用,高扩展
--。。。

3V+3 高

大数据时代的 3V

1. 海量 2. 多样 3. 实时

大数据时代的 3 高:

1 高并发 2. 高开拓 3. 高性能

真正的公司中:NoSQL+RDBMS 一起使用

技术没有高低之分,就看如何使用

阿里巴巴的演进分析

这么多的东西难道都是放在一个数据库中么?B2B

敏捷开发、极限编程、协同开发

开源才是技术的王道,任何一家互联网公司只是让用能用就好了

大量的公司做的都是相同的业务(竞品协议)

随着这样的竞争,业务越来越完善,越来越高!

如果你为想当架构师,没有什么是加一层是解决不了的

商品信息 数据库
基本信息 sql
商品 SPU 属性 DocumentDB
图片 图片银行接口
相关关键字 SearchEngine

思考:

1. 商品:-- 名称,价格,商家信息 ----MySQL /Oracle(淘宝早年就去除 IOE-- 王坚:阿里云的这群疯子)

淘宝内部的Mysql和我们不一样

2. 商品的描述、评论、文字比较多 -- - 文档性数据库(MongoDB)

3. 图片分布式文件系统 FastDFS

  • 淘宝自己的 TFS
  • Gooals 的 GFS
  • Hadoop HDFS
  • 阿里云的 OSS

4. 商品的关键字

--- 搜索引擎 solor elasticsearch

---ISerach :多隆

5. 商品热门信息

-- 内存数据库

--Redis Tair Memache...

6. 商品的交易:

外部的支付接口 -- 三方应用

一个简单网页,背后的技术一定不是那么简单

  • 大型互联网的数据类型太多了
  • 数据源太多了,经常重构
  • 数据要改造

统一的数据服务层 UDSL

---Mapping--

热点缓存平台

  • 过期控制
    • 事件过期
    • 自动过期
  • 热点匹配 --- 热点规则
  • key 生成 -----KEY 规则
  • 缓存读写 ------ 过期规则

热点缓存索引 ----KV 集群

NoSQL 的四大分类

KV 键值对

  • 新浪:Redis
  • 美团:Redis+ Tair
  • 阿里、百度:Redis+memecache

文档形数据库:(bson 格式 json 一样)

  • MongDB()
    • 基于分布式文件储存的数据库,c++ 编写,主要用来处理大量文档
    • 是一个介于关系型数据库和非关系型数据库的中间产品,是非关系型数据库中功能最丰富,最想关系型数据库的
  • ConthDB

列存储数据库

  • HBase
  • 分布式文件系统

图关系数据库

点击查看图片来源

  • 它不存储图片,放的是关系,比如社交网络,广告推荐
  • Neo4j,InfoGrid

在这里插入图片描述