1、sql数据库最大的优点就是 一致性保证 事务里面要么全成功,要不全失败,不会说一件事我做到一半
还能join
事务(Transaction)指一个操作,由多个步骤组成,要么全部成功,要么全部失败。
比如我们常用的转账功能,假设A账户向B账号转账,那么涉及两个操作:
(1)从A账户扣钱;
(2)往B账户加入等量的钱。
信大家在学习数据库的使用时,都有使用过Join,对数据库中的两张或两张以上表进行连接操作。
缺点:
正因为一致性保证,导致性能欠缺
不适用于对象存储
nosql 非关系型数据库
1、例子 redis,MongoDB,HBase,ElasticSearch(专注索引建立),…
锁
乐观锁的概念:
乐观锁:指的是在操作数据的时候非常乐观,乐观地认为别人不会同时修改数据,因此乐观锁默认是不会上锁的,只有在执行更新的时候才会去判断在此期间别人是否修改了数据,如果别人修改了数据则放弃操作,否则执行操作。
冲突比较少的时候, 使用乐观锁(没有悲观锁那样耗时的开销) 由于乐观锁的不上锁特性,所以在性能方面要比悲观锁好,比较适合用在DB的读大于写的业务场景。
悲观锁的概念:
悲观锁:指的是在操作数据的时候比较悲观,悲观地认为别人一定会同时修改数据,因此悲观锁在操作数据时是直接把数据上锁,直到操作完成之后才会释放锁,在上锁期间其他人不能操作数据。
冲突比较多的时候, 使用悲观锁(没有乐观锁那么多次的尝试)对于每一次数据修改都要上锁,如果在DB读取需要比较大的情况下有线程在执行数据修改操作会导致读操作全部被挂载起来,等修改线程释放了锁才能读到数据,体验极差。所以比较适合用在DB写大于读的情况。
读取频繁使用乐观锁,写入频繁使用悲观锁。