oracle|传统行业几乎都用Oracle,而互联网行业几乎都不用Oracle的原因。


oracle|传统行业几乎都用Oracle,而互联网行业几乎都不用Oracle的原因。
文章图片
oracle|传统行业几乎都用Oracle,而互联网行业几乎都不用Oracle的原因。
文章图片
oracle|传统行业几乎都用Oracle,而互联网行业几乎都不用Oracle的原因。
文章图片
oracle|传统行业几乎都用Oracle,而互联网行业几乎都不用Oracle的原因。
这个解决方案都是行业应用特性和数据库自身对应特性决定的 。 Oracle是付费闭源大型数据库 。 我们可以理解为大而全的数据库 , 它可以支持很大的并发 , 很大的访问量 , 目前是OLTP联机事物处理过程最好的工具 。 而Mysql等是开源免费的中小型数据库 , 还是有很大不同的 。 下面我们详细看一下:
1、资源占用方面不同oralce在底层计算资源上 , 它默认就会占更多资源以保障Oracle的高效并发处理 。 oracle在启动后 , 它占用的内存远大于mysql等这些开源数据库 。 所以 , 银行等传统行业的核心Oracle数据库一般都会配备并发性能高的小型机来作为基础硬件支撑 。 一般会采用oracle RAC+DataGuard来实现 。
Mysql本身就是针对中小型数据库的 , 所以默认占用的资源也是较小的 。 互联网企业是通过以量取胜的方法来满足资源需要 。 通常采用大量的PC服务器组件集群来实现 。
补充一点 , oracle默认对事务是完全支持的 , 而mysql则只有innodb才支持 。
2、并发的不同在银行应用中 , 我们可以想象到 , 每天都有很多人对账户进行操作 。 而且通常都是读写同时进行 。 从技术上说 , 大量的写并发会导致写入冲突 。 为了保障数据的一致性 , 一次只能有1个会话可以写入 。 oralce为了保障数据的高并发 , 采用的行级锁 , 只锁定SQL语句要写入数据库对应的数据行 。 这样子就可以保障其他并发用户依然可以写入其他行 。 这和银行的银行业务是非常吻合的 , 所以银行还是使用Oracle居多 。
【oracle|传统行业几乎都用Oracle,而互联网行业几乎都不用Oracle的原因。】而Mysql只有innodb下才有行锁 , 但该行锁需要通过给索引项加锁来实现 , 这种innodb行锁主要分为3种:分别是Record lock(对索引项加锁)、Gap lock(对索引项之间的“间隙”、第一条记录前的“间隙”或最后一条记录后的“间隙”加锁 。 )、Next-key lock(前两种的组合 , 对记录及其前面的间隙加锁) 。 这种行锁意味着 , 如果不通过索引条件检索数据 , 那么InnoDB将对表中的所有记录加锁 , 实际效果跟表锁一样 。 互联网企业在应用开发上也采用微服务架构 , 尽量将大应用拆分成很多微服务来实现 , 这样每个微服务的表都很小 。 这样可以减少锁冲突 。
在大量并发读取数据方面 , 我们同样要保障读取数据的一致性 。 Oracle通过在undo表空间中构造多版本数据块来实现读一致性 , 支持serializable的隔离级别 , 可以实现最高级别的读一致性 。 每个session 查询时 , 如果对应的数据块发生变化 , Oracle会在undo表空间中为这个session构造它查询时的旧的数据块 。 这也是银行等传统行业所需要的特性 。
而mysql虽然也有undo 表空间 , 但只支持read commited的隔离级别 。 一个session读取数据时 , 其他session不能更改数据 , 但可以在表最后插入数据 。 session更新数据时 , 要加上排它锁 , 其他session无法访问数据 。 对互联网行业来说 , 因为采用了微服务架构 , 每个表都很小 , 基本影响就很小了 。


推荐阅读