互联网背景下为什么要用NoSql?
大数据时代的数据具有3V的特征:海量、多样、实时的速度。
互联网网站需求的三大特征:高并发、高可扩展性、高性能。
首先,独立的MySql
当一个网站的访问量很小的时候,用一个数据库就可以轻松处理。
当时静态网页比动态互动网站多。
在上述架构下,数据存储的瓶颈是什么?
1.当一台机器容纳不下全部数据时。
2.数据的索引(B+树)当一台机器的内存装不下时,
3.访问量(读写混合)不是一个实例能承担的。
如果上述1或3得到满足,进化......
二、Memcached +Mysql+垂直拆分
后来随着流量的增加,几乎所有使用MySQL架构的网站都开始出现数据库性能问题。web程序不再只关注功能,还追求性能。程序员开始使用缓存技术来缓解数据库的压力,优化数据库的结构和索引。一开始流行通过文件缓存来缓解数据库的压力,但是当访问量不断增加的时候,很多web机器就无法通过文件缓存来享受了,大量的小文件缓存也带来了相对较高的IO压力。这个时候,Memcached自然会成为一个非常时尚的技术产品。
Memcached作为一个独立的分布式缓存服务器,为多个web服务器提供高性能的缓存服务。在Memcached服务器上,它根据hash算法开发多个Memcached缓存服务的扩展,然后出现一个一致的hash,以解决增加或减少缓存服务器导致的大量缓存失效的弊端。
第三,MySql主从复制读写分离
由于数据库的写压力越来越大,Memcached只能缓解数据库的读压力。读写都集中在一个数据库里,让数据库不堪重负。大多数网站开始使用主从复制技术实现读写分离,以提高读写性能和读取数据库的扩展性。Mysql的主从模式此时成为了网站的标配。
四、子数据库和子表+水平拆分+Mysql集群
在Memcached缓存、MySQL主从复制、读写分离的基础上,MySQL主库的写压力开始出现瓶颈,数据量持续飙升。由于MyISAM使用了表锁,高并发下会出现严重的锁问题,大量高并发MySQL应用开始使用InnoDB engine代替MyISAM。
同时,流行使用子表和子库来缓解写入压力和数据增长的膨胀。此时,子表和子数据库已经成为一个热门技术,是采访中的热点问题,也是业界讨论的热点技术问题。这个时候MySQL推出了不稳定的表分区,也给技术实力一般的公司带来了希望。MySQL虽然引入了MySQL Cluster,但是性能并不能很好的满足互联网的要求,只是为高可靠性提供了很大的保障。
五、Mysql可扩展性瓶颈
MySQL数据库还经常存储一些大的文本字段,导致数据库表非常大,恢复数据库时非常慢,要快速恢复数据库并不容易。比如100000000000000000000000004kb文本接近40GB。如果这些数据可以从MySQL中省略掉,MySQL就会变得非常小。关系数据库很强大,但是并不能很好的应对所有的应用场景。MySQL的扩展性差(需要复杂的技术来实现)、大数据下的IO压力大、表结构难以改变,正是目前使用MySQL的开发者所面临的问题。
第六,为什么要用Nosql?
今天,我们可以通过第三方平台(如谷歌、脸书等)轻松访问和获取数据。).用户的个人信息、社交网络、地理位置、用户生成数据、用户操作日志成倍增长。如果要挖掘这些用户数据,SQL数据库已经不适合这些应用,但是NoSQL数据库的发展还可以很好的处理这些大数据。我们来看看web应用数据的增长图:
7.什么是Nosql?
NoSQL(NoSQL =不只是SQL),意思是“不只是SQL”,
一般指非关系数据库。随着互联网web2.0网站的兴起,传统的关系型数据库已经无法应对web2.0网站,尤其是超大型、高并发的SNS型web2.0纯动态网站,暴露出许多难以克服的问题,而非关系型数据库由于自身的特点,发展非常迅速。NoSQL数据库的产生是为了解决大规模数据集多种数据类型带来的挑战,尤其是大数据的应用问题,包括超大规模数据的存储。
(例如,谷歌或脸书每天为他们的用户收集数万亿比特的数据)。这些类型的数据存储不需要固定的模式,并且无需冗余操作即可横向扩展。
八、Nosql的优势
1.易于扩展
NoSQL数据库有很多种,但相同的特点是摆脱了关系数据库的关系特征。
数据之间没有关系,所以非常容易扩展。无形中带来了架构层面的可伸缩能力。
2.大数据量和高性能
NoSQL数据库都有非常高的读写性能,尤其是在大数据的情况下。
这是由于它的无关性和简单的数据库结构。一般MySQL使用的是查询缓存,每次更新表都会失效。它是大粒度缓存,对于web2.0来说在交互频繁的应用中性能不高,NoSQL的缓存是记录级的,是细粒度的缓存,所以NoSQL的性能在这个级别要高很多。
3.各种灵活的数据模型
NoSQL可以随时存储自定义数据格式,而无需预先为要存储的数据建立字段。在关系数据库中,添加或删除字段是一件非常麻烦的事情。如果是数据量非常大的表,添加字段简直就是噩梦。
九、四类Nosql数据库
键值存储
列存储
文档存储
图形存储
常见的有:Redis,Memcache,MongoDB,这里介绍一下。