一、NoSQL
1.引子
-
12306春节期间买票进不去,进去了刷不着票现象
-
淘宝双十一结账,刷新半天没买到
1)特征
- 海量用户
- 高并发
这两个问题的出现会造成服务器瘫痪,核心原因不是应用服务器,而是关系数据库。
2)原因
-
性能瓶颈:磁盘IO性能低下
-
扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群
- 例如一张表,通过它的外键关联了七八张表,这七八张表又通过外键,每张表也关联了四五张表,这样我们要拿到数据,就要从这张表到那张表又到第n张表,查询效率可想而知。
3)解决
- 降低磁盘IO次数,越低越好
- 去除数据间关系,越简单越好
两个特征一合并一起,就出来了一个新的概念:NoSQL
2.NoSQL概念
1)1.概念
NoSQL:即 Not-Only SQL( 泛指非关系型的数据库),作为关系型数据库的补充。 作用:应对基于海量用户和海量数据前提下的数据处理问题。
2)特征
-
可扩容,可伸缩
- SQL数据关系复杂,扩容难度高,Nosql 不存关系,扩容就简单一些。
-
大数据量下高性能
- 数据非常多的时候,不走磁盘IO,走内存,性能就高。
-
灵活的数据模型、高可用
- 有自己设置的数据存储格式,保证了高效率
3)常见 Nosql 数据库
Redis、memcache、HBase、MongoDB
4)应用场景-电商为例
第一类,在电商中我们的基础数据一定要存储起来,比如说商品名称,价格,生产厂商,这些都属于基础数据,这些数据放在MySQL数据库。
第二类,我们商品的附加信息,比如说,你买了一个商品评价了一下,这个评价它不属于商品本身。就像你买一个苹果,“这个苹果很好吃”就是评论,但是你能说很好吃是这个商品的属性嘛?不能这么说,那只是一个人对他的评论而已。这一类数据呢,我们放在另外一个地方,我们放到MongoDB。它也可以用来加快我们的访问,他属于NoSQL的一种。
第三,图片内的信息。注意这种信息相对来说比较固定,他有专用的存储区,我们一般用文件系统来存储。至于是不是分布式,要看你的系统的一个整个 瓶颈 了?如果说你发现你需要做分布式,那就做,不需要的话,一台主机就搞定了。
第四,搜索关键字。为了加快搜索,我们会用到一些技术,有些人可能了解过,像分ES、Lucene、solr都属于搜索技术。那说的这么热闹,我们的电商解决方案中还没出现我们的redis啊!注意第五类信息。
第五,热点信息。访问频度比较高的信息,这种东西的第二特征就是它具有波段性。换句话说他不是稳定的,它具有一个时效性的。那么这类信息放哪儿了,放到我们的redis这个解决方案中来进行存储。