前言概念
- 横向扩展 也叫 水平扩展,用更多的节点支撑更大量的请求。 如成千上万的蚂蚁完成一项搬运工作
- 纵向扩展 又叫 垂直扩展,扩展一个点的能力支撑更大的请求。如利用1个人的能力,将个人潜力发挥至极致,如蜘蛛侠逼停火车
关系型数据库
关系型数据库是指采用了关系模型来组织数据的数据库。简单来说,关系模式就是二维表格模型。
主要代表:SQL Server,Oracle,Mysql,PostgreSQL。
优点:
1、易于维护:都是使用表结构,格式一致,数据表可以彼此关联协作存储,也很容易提取数据。
2、使用方便:SQL语言通用,可用于复杂查询,可用于一个表以及多个表之间非常复杂的查询。取数据方便,可读性更强,天然就是表格式的
3 如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。使得关系型数据库中可以适用于一切要求一致性比较高的系统中。比如:银行系统。
缺点:
1、读写性能比较差,尤其是海量数据的高效率读写,硬盘I/o是硬伤;在大数据量环境下引入索引能提升检索效率但依然和内存级的非关系型数据库有差距
2、扩展性弱:纵向来看固定的表结构,灵活度稍欠;横向来看数据库是最难以拓展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库没有办法像web Server那样简单的通过添加更多的硬件和服务节点来拓展性能和负载能力
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
面临的挑战:
大数据时代的3v,volumn海量,比如项目运行产生的日志,用户的一条条评论) varity(文字,图片,音频各种各样数据),velocity(响应要及时,提高用户体验),互联网时代的三高 高可用,高并发,高性能
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。 它们往往是分布式的,且一般不保证ACID的数据存储系统,主要代表MongoDB,Redis、CouchDB。
优点:
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
2、速度快:nosql可以使用内存或者随机存储器作为载体(kv结构、单线程涉及,非阻塞io…),而关系型数据库只能使用硬盘;
3、高扩展性;
4、成本低:nosql数据库部署简单,基本都是开源软件。
不提供sql支持,学习和使用成本较高;
2、虽然NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。
3、数据结构相对复杂,复杂查询方面稍欠。
形式
- kv型
- 文档型
- 图形
总结:虽然NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。
这里借鉴java访问数据库的思想,即通过jdbc对接不同厂商的数据库平台,java直接通过jdbc即可对不同的数据库进行操作,阿里也研发了类似于jdbc这种中间层的统一数据服务层;
数据对比(电商平台下单模型案例)
注意点:复杂查询甚至涉及到7.8张表的管理,很复杂,但更要命的是在分布式下环境下是不支持这么干的,因为分布式事物支持不了太多的并并发,而且分布式环境下分表分库,大量的连接查询必然意味着大量的跨库操作,耗时严重;所以我们通常用冗余数据来避免大量的表关联,而且通过图片可看成关系型数据已经被关系模型及表结构限定死了,想扩展并不容易,而非关系型只需要增添或删除几个字段就可以灵活调增表结构
而nosql可以很完美解决这个问题,如下,nosql中存储的数据可以转化为一个个大json串,以前需要7,8张表管理查询的数据一个大json串就可以表示;如果这7,8张表提取出来的数据是热点数据,直接把它的大josn串通过redis缓存到内存中即可
常见的nosql数据格式
- KV,kv键值对,常见
- BSON,类似于json,常见
- 列族:顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一 列或者某几列的查询有非常大的IO优势。
图形 :社交软件表示复杂人际关系时通用,比如向你展示你可能感兴趣的人,你和这位好友的共同好友
nosql的四大类型
数据库选择实战应用,以淘宝首页为案例
基本商品信息:此类信息存储在关系型数据库中
商品描述,详情,用户对商品的描述(文本类型),此类信息存储在文档型数据库mongdb中
商品图片:淘宝自己的tfs,谷歌则是使用gfs
商品关键字:ISearch搜索引擎
商品热点信息:比如百度热搜,放到非关系型内存数据库redis中,起到缓存的作用