首先: NoSql = not only sql 。。。 估计第一次见的就我一个以为是不用sql。。。
1. NoSql泛指非关系数据库。(mysql,oracle 都是经典的关系数据库)
2. 关系型数据库 和 非关系数据库 最简单的区别:
关系型数据库是有行列的,栅格结构。
非关系型不用行列结构存储数据。而是其他形式储存数据:比如key value键值对,列,BSON,图 等结构
3.非关系型 vs 关系型
非关系型数据库的优点:
1. nosql可以直接存储对象,图片等,而且更利于扩展,添加缓存,分布式存储。(关系数据库有表关系,join,外键一类的,导致牵一线而动全身,分布式存储会很困难)
2. nosql读写更快。 (关系数据库需要用同时更新索引所以会比较慢)
关系型数据库的优点:
1. 因为有索引所以查询更快
2. 标准化的表结构保证了数据的一致性,使得事务逻辑更清晰。
3. 可以使用join等复杂查询。
4. 而且发展时间长,更加稳定可靠。
为什么使用NoSql
1.
传统网站架构:
数据库 - spring(dio, service) - springMVC(controller) - view(jsp/html)
随着用户访问量增加,一个数据库可能无法处理那么多数据,需要改进
解决:
1. 添加cache(缓存), 处于dal和数据库之间,把经常使用的数据直接从缓存中读取而不是重复数据库查询。
2.主从分离,读写分离。 在不同数据库上设立主表和从表,主表存经常修改的数据(比如商品评价),从表存只读不写的数据(比如淘宝的用户账号信息,商品基本信息)。
3.分布式集群。 使用分布式(简单说就是把一个工程的数据分布到很多个服务器上)用多个服务器用来存储数据。(比如一个专门存客户,一个专门存商家,一个专门存商品等)
4. 后来随着数量越来越大,关系型数据库在分布式方面的弱势越来越明显,所以出现了NoSql
由于Nosql修改快,mysql查询快,所以目前主流结构是:Nosql 和 mysql 结合。
商品基本信息:mysql
商品描述(大字段):MongDB
商品图片:文件存储数据库TFS
商品热搜高频字段:内存数据库(redis)
数据库事务特点:
传统数据库ACID:
Atomic(原子性)
Consistency(一致性)
Isolation(隔离性)
Durability(持久性)
CAP:
mysql 等数据库就是CA类型
redis,MongDB等是CP
CouchDB是AP原则。
大多数网站开发遵循AP原则:
因为分布式系统中,分区是必须的,所以P锁定了。
然后可用性肯定要一直保证。
而为了解决一致性,采用用BASE的原则:
基本可用(basically available):保证C
软状态(soft state):数据可以暂时性不一致
最终一致(eventually consistent):在最后的时候保持一致
比如双11,为了减少压力,可以允许一些数据不一致(比如你在双11的 0 点买了一个商品,60%的人都是在那1分钟内点下单,所以先只更新客户表和库存表,让你知道你买了。可能商家的表里还没更新,他还不知道你买了)。等过了高峰后再同步各个分布式数据库的数据。