设为首页 加入收藏

TOP

达梦7的试用 与SQLSERVER的简单技术对比(二)
2019-09-03 03:35:38 】 浏览:72
Tags:达梦 试用 SQLSERVER 简单 技术 对比
序的连接重定向

到备机

SQLSERVER里面使用镜像技术时,C#的连接字符串,Partner=myMirrorServerAddress指定备机地址,故障发生的时候.NET Data Provider

自动重定向连接到备机

Database mirroring    --数据库镜像 连接字符串 C# 
Data Source=myServerAddress;Failover Partner=myMirrorServerAddress;
Initial Catalog=myDataBase;Integrated Security=True;

 

SQLSERVER里的镜像技术原理,下面摘抄自《SQLSERVER2012实施与管理实战指南》

数据库镜像的基本概念讲得差不多了。那么主体数据库和镜像数据库是如何同步数据的呢?
SQL数据库中任何的数据变化都会先记录到事务日志中,然后才会真正更新数据页面。
而事务日志是先保存在该数据库的 日志缓存(log buffer)里,然后将缓冲中的日志固化到磁盘上LDF文件中。
在数据库镜像中,主体服务器在将主体数据库的日志从日志缓存固化到磁盘的同时,
还会使用另一个线程来将 日志块(log block)发送到镜像服务器的端点。
当镜像服务器通过端点接收到日志块后,他先将日志块放到镜像数据库的 日志缓存里,然后将缓存里的日志固化到磁盘上。
一旦 日志块被固化后,镜像服务器会根据日志来对镜像数据库执行“ 重做(redo)”,最终更新数据页面。
镜像服务器重做日志时, 镜像数据库实际就是在执行日志的前滚操作
如果重做失败,则镜像服务器通过将数据库至于suspended状态来暂停会话。
DBA必须找到问题的原因并解决问题才能继续会话。
当主体服务器截断或收缩数据库事务日志时,镜像服务器也将在日志的同一点收缩日志。
 
可以看到,数据库镜像其实就是通过发送日志来保持伙伴之间的同步。
从SQL2008开始, 日志块在被主体服务器发送网络之前会做压缩处理。
这麽做的目的是为了提升日志发送和接收的效率,降低日志块传输对网络链路和网络设备所带来的负载。
对应那些异常繁忙的生产系统,这项功能不但降低了由于网络不胜负荷的镜像会话异常中断,
也降低由于网络延迟导致的数据库镜像性能问题,可谓一举两得。
 

达梦数据库的数据守护技术实际上是对应于SQLSERVER 的Always On技术和镜像技术

SQLSERVER 的Always On技术镜像技术都是高可用技术,由于每种数据库对一些名词概念都采用自己的叫法

例如SQLSERVER里叫高可用,而MYSQL和ORACLE叫可用性,达梦里面叫数据守护,叫法不同,实际上都是指同一样东西

因为叫法的不同导致有一些ORACLE专家以为SQLSERVER没有可用性的方案和产品

ORACLE:RAC集群Data guard 

MYSQL:MYSQL CLUSTER

SQLSERVER:Always On镜像

 

有一些架构是share-disk,而有一些架构是share-nothing的,具体在这里不展开来讲了

有兴趣的朋友可以看一下宋沄剑写的《数据库集群技术漫谈

 

技术对比四

数据库复制

数据库复制不算是数据守护的技术,所以不归到数据守护里面

在SQLSERVER里,有发布数据库、分发数据库、订阅数据库之分

而达梦里面主服务器就是发布库,复制服务器就是分发库,从服务器就是订阅库

达梦数据库的复制结构跟SQLSERVER差不多

 

技术对比五

上面都说了相同点,现在说一下不同点,但是由于篇幅限制,我这里只说达梦的数据库数据页面的结构是怎样的

 

达梦数据库的页面有不同的大小,有4K、8K、16K、32K,实际上达梦数据库将数据页面叫数据块

跟ORACLE一样也是叫数据块

达梦数据库在配置文件里设置数据块的大小,重启数据库服务之后,达梦就会读取配置文件新的配置信息(有点类似MYSQL)

在新建表的时候就会根据配置文件来创建数据块

 

而表的数据类型的长度根据当前数据块的大小的不同而不同

 

而在SQLSERVER里面,是不能设置数据页面的大小的,每个数据页面的大小都是8K


重头戏:COUNT(*)统计结果行数

大家注意下划线部分!!

SQLSERVER跟达梦是一样的

USE [sss]
CREATE TABLE counttb(id INT NULL)

INSERT INTO [dbo].[counttb]
        ( [id] )
SELECT 1 UNION ALL 
SELECT NULL 

SELECT COUNT(1),COUNT(*),COUNT(id) FROM [dbo].[counttb]

 

本人之前也写过一篇,至于哪个观点正确留给大家去思考了

SQLSERVER 里SELECT COUNT(1) 和SELECT COUNT(*)哪个性能好?


总结

虽然大部分原理一样,但是语法跟数据库的结构还是有一些出入

所以当DBA从一种数据库转型到另一种数据库的时候还是需要一段时间的学习

例如从SQLSERVER转到MYSQL 或者ORACLE转到SQLSERVER

 

本文通过技术对比,可以使大家对达梦数据库的技术含量有一个度,虽然没有实际使用过,最起码了解一下我们国家的自主知识产权的产品还是不错的

 

实际上,达梦数据库的基本功能:序列、全文索引、策略、表分区。。。

这些该有的功能都有了,大家可以看一下文档,比较一下与ORACLE、SQLSERVER、MYSQL的区别

基本上这些数据库有的功能达梦都有

希望达梦这支国家队能够越来越强大的,在数据库方面使国家能够早日摆脱外国的数据库大佬们的制约

 

如有不对的地方,欢迎大家拍砖o(∩_∩)o 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Install MongoDB driver for PHP .. 下一篇Hadoop fs命令(转)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目