–前提:环境搭建在远程服务器上
nosql概述
为什么要用nosql
1.单机MySQL时代
问题: 一个基本的网站数据访问量基本不会太大,单个数据库完全够用
那个时候,更多的去使用静态网页html -服务器根本没有太大的眼里
思考以下:这种情况下,整个网站瓶颈是什么?
1.数据量如果太大,一个机器放不下
2.数据的索引(B+),一个机器内存也放不下
3.访问量(读写混合),一个服务器承受不了
只要你开始出现以上三种情况之一,那么你就必须要晋级。
2.Memcached + Mysql + 垂直拆分(读写分离----主要解决读问题)
网站80%的情况下都是在读 ,如果每次都去查询数据库的话就十分麻烦!所以我们希望减轻数据库的压力,我们可以使用缓存来保证效率。
**发展过程:**优化数据结构和索引 —> 使用文件缓存(IO操作)—> Memcached(当时最热门的技术!)
3.分库分表 + 水平拆分 + MySQL集群(—解决写的问题)
本质:数据库(读、写)
早些年MyISAM:表锁,十分影响效率,高并发会有十分严重的锁问题
转战InnoDB:行锁
慢慢地开始使用分库分表来解决写的压力!MySQL在那个年代推出了表分区(并没有多少公司使用)!
后来推出了MySQL集群,很好满足了那个年代的大部分需求。
4.如今最近的年代
2010-2020十年时间,世界发生了翻天覆地的变化!(定位,也是一种数据)
MySQL等关系新数据库就不够用了!数据量很大,变化很大。
MySQL有的使用它来存储一些比较大的文件、博客、图片。数据库表很大,效率就低了!如果有一种数据库来专门处理这种数据,MySQL要来就变得十分小(研究如何处理这些问题!) 大数据IO压力下,表几乎没法更改。 比如一亿行的表加一列?
目前一个基本的互联网项目
为什么要用noSQL呢?
用户的跟人信息,社交网络,地理位置。用户自己产生的数据、用户日志等等爆发时增长。
这时候我们就需要用noSQL数据库,noSQL可以很好处理以上的情况!
什么是noSLQ
NoSQL
NoSQL = NOT ONLY SQL (不仅仅是SQL)
关系型数据库:表格,行 ,列(POI技术)
泛指非关系型数据库的,随着web2.0互联网的诞生!传统的关系型数据库很难对付web2.0时代! 尤其是超大规模的高并发的社区! 暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展十分地迅速,Redis发展是最快的。
很多的数据类型用户的 个人信息,社交网络,地理位置。这些数据类型的存储都不需要一个固定的格式!不需要多余的操作就可以横向扩展(or纵向)!
Map<String,Object> 使用键值对来控制!
NoSQL特点
1.方便扩展!(数据之间没有关系,很好扩展)
2.大数据量高性能!(Redis 一秒 可以写8万次,读取11万次,noSQL的缓存记录级,是一种细粒度的缓存)
3.数据类型是多样性的!(不需要事先设计数据库!数据随取随用!mysql如果是数据量十分大的表,很多人就无法设计了!)
4.传统的RDBMS 和NoSQL
- 传统的RDBMS
- 结构化组织
- SQL
- 数据和关系都存在单独的表中
- 数据操作、数据定义语言
- 严格的一致性
- 基础的事务操作
- …
- NoSQL
- 不仅仅是数据
- 没有固定的查询语言
- 有很多种存储方式,键值对存储,列存储,文档存储,图形数据库(社交关系)
- 最终一致性
- CAP定理和BASE (异地多活)
- 高性能(保证用户体验和性能)、高并发、高可扩展性(机器不够了,随时加一台服务器)
- …
真正在公司中的实践:NoSQL + RDBMS 一起使用才是最强的。
阿里巴巴演进分析
思考: 这么多的东西,都是在一个数据库中的吗?
技术记不得?越是慢慢学,才能越扎实。
开源才是技术的王道?
如果你未来想当一个架构师,没有什么是再加一层解决不了的。
# 1.商品的基本信息
名称、价格、商家信息
关系型数据库就可以解决了 ! MySQL/Oracle (淘宝早年就去IOE了)
淘宝内部的MySQL 不是大家用的MySQL
# 2. 商品的描述、评论(文字比较多)
文档型数据库中,MongoDB
# 3.图片
分布式文件系统 FastDFS
- 淘宝自己的TFS
- Google 的GFS
- Hadoop HDFS
- 阿里云的 OS
# 4.商品的关键字(搜索)
-搜索引擎 solr elasticsearch
- ISerach: 多隆
#5.商品热门的波段信息
- 内存数据库
- Redis Tair MeMche
#6.商品的交易、外部的支付接口
- 三方引用
大型互联网问题:
- 数据类型太多了
- 数据源太多了,经常重构
- 数据要改造,需要大面积改造
解决问题:
- 统一数据服务层UDSL
NoSQL的四大分类
KV键值对
- 新浪:Redis
- 美团:Redis + Tair
- 阿里、百度:Redis+memecache
文档型数据库(bson格式)
和json一样,是二进制的json
- MongoDB
- MongoDB是一个基于分布式文件存储的数据库,是由C++编写的,主要用来处理大量的文档!
- MongoDB是一个介于关系型数据库和非关系型数据库中中间的产品!MongoDB是NoSQL数据库中功能最丰富,最像关系型数据库的。
- ConthDB
列存储数据库
- HBase
- 分布式文件系统
图关系型数据库
- 它不是存储图形,放到是关系。比如:朋友圈 社交网络,广告推荐!
- Neo4j,InfoGrid
Redis 入门
概述
redis 是什么?
Redis( Remote Dictionary Server),远程服务字典!
是一个开源的 使用ANSI C语言编写、支持网络、可支持内存亦可支持持久化的日志型、Key-Value数据库,并提供多种语言的API。
免费和开源! 是当下最热门的NoSQL技术之一!也被人称之为结构化数据库!
Redis能干嘛?
1、内存存储、持久化,内存中是断电即失、所以说持久化很重要(rdb,aof)
2、效率高,可用于高速缓存
3、发布订阅系统
4、地图信息分析
5、计时器、计数器(浏览量)
6…
Redis 特性
1、多样的数据类型
2、持久化
3、集群
4、事务
…
Redis学习配置
1、redis官网
2、redis 中文网
3、下载地址:通过官网下载即可
注意:window 在Github上下载既可以(停更很久了)
Redis推荐都是在Linux服务器搭建,我们是基于Linux学习的