NoSQL数据库
单机MySQL时代
Memcached缓存 + MYSQL 垂直拆分
- 替数据库档一层 就是缓存 减轻数据库被访问的负担
主从复制 读写分离
- 写的操作在主库 读的操作在从库
分表分库 水平拆分 MySQL集群
- 主库的写压力出现瓶颈。数据猛增。
- 数据库的引擎。
- 七八种引擎。
- 表锁:我在用的时候你们在候着。
- 行锁:只锁行。 并发性更好。InnoDB引擎。
- 分库分表:集群将大表分库,每个库分一点减轻压力。
MySQL扩展的瓶颈
- 视频,图片数据是不能放进MySQL里面的。
nginx做负载均衡反向代理
为什么使用NoSQL?
- 网状数据 传统的关系型数据库不再适合。
- ==不仅仅是SQL==
- 泛指非关系型数据库
- 这类型的数据存储==不需要固定==的模式无需多余的操作就可以横向扩展。
- 固定就是指固定的表字段
能干的活
- 易于扩展。数据之间无关系非常容易扩展。对前台的数据再抽象。比定死的更容易扩展。利用map。
- 大数据量高性能。查询同一个东西原模原样的查询第二次就是从缓存当中去取。一般的MySQL数据库使用query cache 每次表的更新cache就失效是一种大粒度的cache。
- 多样灵活的数据模型。在关系型数据库增删字段是非常的麻烦的事情,如果是非常大的表这是一个噩梦。
非ACID
CAP定理
键值对的存储。
Redis
- memcache 高速缓存
- mongdb
- tair
记住:KV,cache,persistence
- ==大数据时代的3V和3高==
- 海量,多样,实时。
- 高并发,高可扩,高性能。
做不到绝对的实时都是准实时。
一堆主机封装成一台主机对外工作,前面档一个负载均衡也就是调度算法进行导航策略。横向的扩张。就是集群。当下的应用是SQL和NoSQL一起使用。
淘宝网页的演变史
- 1999:perl CGI oracle
- 2000: java servlet
- 2001-2004: EJB时代
- 2005-2007:去EJB重构:==spring== + ibatis+==webx== antx 底层架构:isearch MQ+ESB 数据挖掘 CMS
- 2008-2009:==memcached集群==,MySQL+数据切分 = cobar 分布式存储 hadoop,kv,CDN
2010: 安全镜像,应用服务器升级,秒杀,NoSQL SSD.
淘宝技术这十年。
- ==多数据源多数据类型的存储问题==。
- 稳定的数据:名称,价格,出厂日期,生产厂商等等 存储在关系型数据库当中MySQL/Oracle。改进过的。去IOE化。
- 商品描述详情评价:多文字信息描述 IO 读写性能变差存储在==文档数据库mongDB当中==。
- 商品的图片:==分布式文件系统==:Hadoop:HDFS google:GFS 淘宝自己的TFS
- 商品的关键字:==Isearch 搜索引擎 站内搜索==。
- 商品波段性的高频词汇:==内存数据库==:Tair,redis memcache
- 商品的交易 价格计算 积分:支付宝,外部的第三方接口。
面对接口编程,中间包一层。==统一数据平台服务层。UDSL==
- 分为:数据层,统一数据服务平台,应用层
- 电商系统订单订购地址模型来对比关系型数据库和非关系型数据库。
- 传统的关系型数据库的范式 1对11对多多对多等等的结合。再要增加模块很难很复杂。
- BSON描述:是json的一种二进制形式的存储方式 简称 binary json.和json一样支持内嵌的文档对象和数组对象。
- 字符串的解析。
- 可以合并和分开
- 现在表结构变成字符串 聚合模型
- 分布式系统忌讳多表关联的查询 SQL太复杂 。表散落在不同的库。
- 分布式事物是支持不了太多的并发的。
- 简化查询难度:查id得到所有的字符串 直接就可以查到。不用再写一堆SQL去查询。
聚合模型
- KV键值对
- BSON
- 列族
- 图形
CAP BASE
- 传统的关系型数据库就是==ACID==
- A atomicity原子性
就是说事物所有的操作必须要么全部做完,要么都不做。只要有一个操作失败整个事务就失败需要回滚。
- C consistency一致性
数据库需要一直处于一致的状态 事务的运行不会改变数据库的原本一致性的约束
- I isolation独立性
是指并发的事务之间不会影响,如果一个事务要访问的数据正在被另一个事务修改,只要另一个事务未提交他所访问的数据就不受未提交的事务的影响。
- D durability持久性
是指一旦事务提交之后他所做的修改将会永久保存在数据库上即使出现宕机也不会丢失。
==CAP==
- C:consistency 强一致性。
- A:Availability 可用性。
- P:partition tolerance 分区容错性
CAP只能3选2.
- CAP理论是:一个分布式系统不可能同时很好的满足一致性,可用性,分区容错性这三个需求。
- 最多同时满足两个。
- 分区容错性必须实现
- CA传统的Oracle数据库
- AP 大多数网站架构的选择
- CP Redis mongodb
- 很难做到决定的实时。发一条消息之后过几秒几十秒之后才能被订阅者看到。
- ==读己之所写==。
- ==BASE==:解决关系型数据库强一致性引起的问题而引起的可用性降低而提出的解决方案
- 基本可用 Basically Available
- 软状态 soft state
- ==最终一致== eventually consistent
思想是:通过让系统放松对某一时刻的数据一致性的要求来换取系统整体的伸缩性和性能上的改观。
分布式 + 集群
- 分布式系统:由多台计算机和通信软件通过计算机网络连接组成。分布式系统是建立在网络之上的软件系统。
- 分布式:不同的多台服务器上面==部署不同的服务模块==,他们之间通过Rpc/Rmi之间通信和调用对外提供服务和组内协作。
- 集群:不同的多台服务器上面部署==相同的服务模块==。通过分布式调度软件进行统一的调度对外提供服务和访问。