Nosql概述
时代背景:
1.单机数据库时代
90年代:一个基本的网站访问量一般不会太大,单个数据库完全足够!
-
那个时候,更多的去使用静态网页 Html~服务器根本没有太大的压力!
-
思考一下,这种情况下:整个网站的瓶颈是什么?
1,数据量如果太大,一个机器放不下了!
2,数据的索引(B+Tree),一个机器内存也放不下
3.访问量(读写混合)
-
2.Memcached时代
memcached是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但被许多网站使用。这是一套开放源代码软件,以BSD license授权发布。
memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后。
memcached的API使用三十二比特的循环冗余校验(CRC-32)计算键值后,将数据分散在不同的机器上。当表格满了以后,接下来新增的数据会以LRU机制替换掉。由于memcached通常只是当作缓存系统使用,所以使用memcached的应用程序在写回较慢的系统时(像是后端的数据库)需要额外的代码更新memcached内的数据。
(缓存) + 数据库 +垂直拆分(读写分离)[此处的数据库都是指mysql数据库]
垂直拆分:
顾名思义是将表垂直着给拆掉,即:
- 将表的字段拆成多张表(列拆分)
水平拆分:
顾名思义是将表数据水平的拆掉,即:
- 将表的内容进行拆分(行拆分),一表内容放多表存储。
3. 水平拆分
分库分表+水平拆分+Mysql集群
技术和业务在发展的同时,对人的要求也越来越高了
本质:数据库(读,写)
早些年MyISAM:表锁,十分影响效率!高并发下就会出现严重的锁问题
转战Innodb:行锁
慢慢的就开始使用分库分表来解决写的压力!MySQL 在哪个年代推出了表分区!这个并没有多少公司使用!
MySQL 的集群,很好满足哪个年代的所有需求!
InnoDB支持事务,MyISAM不支持;
InnoDB支持外键,而MyISAM不支持;
InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。
MyISAM是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快(注意不能加有任何WHERE条件);
Innodb不支持全文索引,而MyISAM支持全文索引,在涉及全文索引领域的查询效率上MyISAM速度更快高;PS:5.7以后的InnoDB支持全文索引了
MyISAM表格可以被压缩后进行查询操作
InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁
InnoDB的行锁是实现在索引上的