redis会自动持久化吗
oraclemysql并发性_Oracle和mysql的区别
⼀、数据库的主要类型
数据库类型主要可分为:⽹状数据库、关系数据库、树状数据库、⾯向对象数据库。在商业中最主要的是关系型数据库,例如:Oracle、DB2、Sybase、My SQL Server、Informax、Redis、MySQL等。
Oracle和mysql的区别hive count distinct
Oralce是⼤型数据⽽mysql是中⼩型关系型数据库。Oralce占市场的40%⽽mysql占市场的20%。
⼀、并发性
Oracle⽀持⼤并发量和访问量,是oltp最好的⼯具
并发性是oltp数据库的最重要的特性,但并发涉及到资源的获取、共享与锁定。
mysql安装后占152M⽽orcale占3G多,在使⽤和操作的时候占⽤机器资源性能特别多。
mysql:以表级锁为主,对资源锁定的粒度很⼤,如果⼀个session对⼀个表加锁时间过长,会让其他session⽆法更新⽐表中的数据。虽然InnoDB引擎的表可以⽤⾏级锁,但这个⾏级锁的机制依赖于表的
索引,如果表没有索引,或者sql语句没有使⽤索引,那么仍然使⽤表级锁。
Oracle:使⽤⾏级锁,对资源锁定的粒度⼩很多,知识锁定sql需要的资源,并且加锁实在数据库中数据⾏上,不依赖索引,所以oracle对并发性的⽀持要好很多。
⼆、⼀致性
oracle:oracle⽀持serializable的隔离级别,可以实现最⾼级别的读写⼀致性,每个 session提交后其他session才能看到提交的更改。Oracle通过在undo表空间中构造版多本数据库来实现读写⼀致性,每个session查询时,如果对应的数据块发⽣变化,oracle会在undo表空间中为欸这个session构造它查询时的旧的数据块。
mysql:mysql没有类似oracle的构造多版本的数据块的机制,⽀持read commietd的隔离级别。⼀个session读取数据时,其他session 不能更改数据,但可以在表最后插⼊数据。
session更新数据时,要加上排它锁,其他session⽆法访问数据。
三、事务
oracle:事务便是是使数据库从⼀种状态换成位另⼀种状态,这不同于⽂件系统,它是数据所特⽤的。
它的特性主要分为四个
html5毕业设计题目原⼦性:语句级原⼦性,过程级原⼦性,事务级原⼦性。
⼀致性:状态⼀致,同⼀事务中不会有两种状态
隔离性:事务键是互相分离互不影响(也有可能有⾃治事物)
持久性:事务提交了,那么状态就是⽤过就的
分布式事务:在oralce中会在⼀个事务中控制多个数据库来保证数据库中的数据的完整性,主要通过dblink。
⾃治事务:是独⽴于务的⼀个⼦事务,它的提交与回滚不影响主事务的操作。
⾃治事务提供了⼀种⽤PL/SQL控制事务的新⽅法,可以⽤于:
1、顶层匿名块
2、本地,独⽴或打包的函数和过程
3、对象类型的⽅法
4、数据库触发器
伽马函数3 2
mysql:事务的实现就是基于数据的引擎,不同的储存引擎对事务的⽀持程度不⼀样。mysql中⽀持事务的存储引擎有innoDB和NDB。innoDB是mysql默认的存储引擎,默认的隔离界别是RR,并且在RR的隔离级别下更近⼀步,通过多版本并发控制,解决不可重复都的问题,加上间隙锁(并发控制)解决 幻读问题,因此innoDB的RR隔离界别其实实现了串⾏化级别的效果,⽽且保留了⽐较好的并发性能。
事务的隔离性是通过锁实现,⽽事务的原⼦性、⼀致性和持久性则是通过事务的⽇志实现。事务就是redo和undo
分布式事务:分布式事务的实现⽅式有很多,既可以采⽤innoDB提供的原⽣的事务⽀持,也可以采⽤消息队列来实现分布式事务的最终⼀致性。
模型分三块:应⽤程序,资源管理器,事物管理器
应⽤程序定义了事务的边界,指定需要做哪些事务;
资源管理器提供了访问事务的⽅法,通畅⼀个数据库就是⼀个资源管理器;
事务管理器协调 参与了全局事务中的各个事务。
分布式事务采⽤了两段式提交的⽅式,第以阶段所有的事务节点开始准备,告诉事务管理器ready。第⼆阶段事务管理器告诉每个节点是commit还是rollback。如果有⼀个节点失败,就要全局的节点全部是rollback,从此保障事务的原⼦性。
原⼦性:⼀个事务的执⾏视为⼀个不可分割的最⼩单元,事务⾥⾯的操作,要么全部成功执⾏,要么全部失败回滚,不可以执⾏其中的⼀部分。
⼀致性:⼀个事务的执⾏ 不应该破坏数据的完整性。
隔离性:通常来说,事务之间的⾏为不应该互相影响,然⽽实际情况中,事务相互影响的程度收到了隔离级别的影响 。
持久性:事务提交后,需要将提交的事务持久化到磁盘,即使系统崩溃,提交的数据也不应该丢失。
事务的四种隔离级别:
1.READ UNCOMMITTED(未提交读)。在RU的隔离级别下,事务A对数据做的修改,即使没有提交,对于事务B来说也是可见的,这种问题叫脏读。这是隔离程度较低的⼀种隔离级别,在实际运⽤中会引起很多问题,因此⼀般不常⽤。
2.READ COMMITTED(提交读)。在RC的隔离级别下,不会出现脏读的问题。事务A对数据做的修改,提交之后会对事务B可见,举例,事务B开启时读到数据1,接下来事务A开启,把这个数据改成2,提交,B再次读取这个数据,会读到最新的数据2。在RC的隔离级别下,会出现不可重复读的问题。这个隔离级别是许多数据库的默认隔离级别。
3.REPEATABLE READ(可重复读)。在RR的隔离级别下,不会出现不可重复读的问题。事务A对数据做的修改,提交之后,对于先于事务A开启的事务是不可见的。举例,事务B开启时读到数据1,接下来事务A开启,把这个数据改成2,提交,B再次读取这个数据,仍然只能读到1。在RR的隔离级别下,会出现幻读的问题。幻读的意思是,当某个事务在读取某个范围内的值的时候,另外⼀个事务在这个范围内插⼊了新记录,那么之前的事务再次读取这个范围的值,会读取到新插⼊的数据。Mysql默认的隔离级别是RR,然⽽mysql的innoDB引擎间隙锁成功解决了幻读的问题。
4.SERIALIZABLE(可串⾏化)。可串⾏化是最⾼的隔离级别。这种隔离级别强制要求所有事物串⾏执⾏,在这种隔离级别下,读取的每⾏数据都加锁,会导致⼤量的锁征⽤问题,性能最差。
mysql在innodb存储的 引擎的⾏级锁的情况才⽀持事务。
四、数据持久化
oracle
保证提交的数据均可恢复,因为oracle把提交的sql操作线写⼊了在线联机的⽇志⽂件中,保持到了磁盘上。如果出现数据库或主机异常重启,重启后oracle可以考联机在线⽇志恢复客户提交的数据。
mysql
默认提交sql语句,但如果更新过程中出现db或主机重启的问题也许会丢失数据。
五、提交⽅式
oracle默认不⾃动提交,需要⽤户⼿动提交。
mysql默认是⾃动提交的。
六、逻辑备份
oracle逻辑备份时不锁定数据,且备份的数据是⼀致的。
mysql逻辑备份时要锁定数据,才能保证备份数据是⼀致的,影响业务正常的dml使⽤。
七、热备份
oracle有成熟的热备份⼯具rman,热备时,不影响⽤户使⽤数据库,即使备份数据库不⼀致,也可以恢复时通过归档⽇志,和联机重做体制进⼀致恢复。
mysql:myisam的引擎,⽤myslq⾃带的myslqhostcopy热备时i,需要给表加读锁,影响dml操作。
innodb的引擎,它会备份innodb的表和索引,但是不会备份,frm⽂件⽤ibbackup备份⽂件时,会有⼀个⽇志⽂件记录备份期间的数据变化,因此可以不⽤锁表,不影响其他⽤户使⽤数据库,但此⼯具是收费的。
innobackup是结合ibbackup使⽤的⼀个脚本,他会协助对,frm⽂件的备份html时钟代码
⼋、sql语句的扩展性和灵活性
mysql对sql语句有很多⾮常实⽤的⽅便扩展,⽐如limit功能,insert可以⼀次插⼊多⾏数据,select某些数据管理可以不加from
oracle在这⽅⾯感觉更加稳重传统⼀些。
九、复制
oracle:既有推或拉式的传统数据的复制,也有datagurad的双机或多 机容灾机制,主库出现问题是,可以⾃动切换备库到主库,但配置管理叫复杂。
mysql:复制服务器的配置简单,但主库问题时,从库有可能丢失⼀定的数据,且需要⼿⼯切换到从数据库
⼗、性能诊断
oracle有各种成熟的性能诊断调优⼯具,能实现很多⾃动的分析,诊断功能,⽐如awr,addm、sqltrace、tkproof等。
myslq的诊断调优⽅法较少,主要有慢查询⽇志。
⼗⼀、权限与安全
mysql的⽤户与主机有关,没有什么意义,另外更容易被仿冒者主机及ip有可乘之机。
oracle的权限与安全概念⽐较传统,中规中矩。
⼗⼆、分区表的分区索引
oracle的分区表和分区索引功能很成熟,可以提⾼⽤户的访问db的体验。
mysql的分区表还不太成熟稳定。mysql语句转oracle
⼗三、管理⼯具
oracle有很多成熟的命令⾏,图形界⾯、web管理⼯具、还有很多第三⽅的管理⼯具、管理极其⽅便⾼效。
mysql管理⼯具较少 ,在linux下的管理⼯具的安装有时要安装 额外的包,有⼀定的复杂性。
本⽂出⾃ “凌宇的技术博客” 博客,谢绝转载!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。