文章出處

達夢7的試用 與SQLSERVER的簡單技術對比

達夢數據庫公司推出了他們的數據庫服務管理平臺,可以在該平臺使用達夢數據庫而無須安裝達夢7數據庫

地址:http://online.dameng.com/

說實話,第一眼看到還是感到很高大上的,畢竟ORACLEMYSQLSQLSERVER都沒有推出數據庫試用的云平臺

其實其他數據庫也應該學習一下達夢,做一個平臺讓大家有機會學習自家的數據庫知識,雖然現在這個時代下載安裝包比較容易,不過提供一個平臺也是有好處的

達夢數據庫文檔下載:http://files.cnblogs.com/lyhabc/DM%E6%96%87%E6%A1%A3.rar

 

 


試用體驗

達夢數據庫使用的SQL語言是DM_SQL

 

達夢數據庫的存儲層次結構

有空的朋友可以看一下主頁右下角的三個文檔

 

 

具體的DM_SQL語法和命令大家可以參考DM_SQL.pdf

 

 


試用開始

1、我們先選擇一個實例,達夢是這樣的,一個實例下面只能掛一個數據庫,不像SQLSERVER和MYSQL可以掛多個數據庫

我們就選DM1這個實例,Windows的,有一些實例可能有人在用所以你會連接不上,當前會話數那里就顯示了哪些實例是有在用的

而且這些實例下面有一些是已經有人建了數據庫在上面的了

2、選擇完實例之后,我們就可以創建數據庫,我們打開新建查詢窗口

 

 腳本:

--建庫
CREATE TABLESPACE BOOKSHOP DATAFILE 'BOOKSHOP.DBF' SIZE 150

--創建模式和表
CREATE SCHEMA RESOURCES AUTHORIZATION SYSDBA


CREATE TABLE RESOURCES.COMPANYHOLIDAYS
(
  HOLIDAY DATE
)STORAGE(ON BOOKSHOP);

--插入數據
INSERT INTO RESOURCES.COMPANYHOLIDAYS(HOLIDAY)
VALUES('2007-7-21')

INSERT INTO RESOURCES.COMPANYHOLIDAYS(HOLIDAY)
VALUES('2008-8-26')

INSERT INTO RESOURCES.COMPANYHOLIDAYS(HOLIDAY)
VALUES('2010-10-2')


--查詢數據
select "HOLIDAY"
from "RESOURCES"."COMPANYHOLIDAYS";
View Code

TIPS:如果實在不知道語句怎么寫,不用擔心,左邊的管理器也有生成腳本的功能,只需要選中表然后按右鍵,彈出右鍵菜單

不過右下角沒有顯示您當前連接的是哪個實例哪個庫,不是太方便

 

 

查看表屬性,可以看到表是使用16K的塊大小

管理界面


這個管理平臺的基本功能

 

平臺編輯器的功能:語法自動補全、自動格式代碼、關鍵字自動高亮、調試、界面管理跟一個完整的數據庫管理工具差不多

缺點是右下角沒有顯示出當前在使用的實例和數據庫名

 

下面是部分功能截圖

新建了數據庫和模式之后,馬上就可以在左邊的樹型菜單里看到新建的模式

 

 

可以看到當前達夢數據庫是運行Windows2003系統上的

達夢里有比較多的系統工作線程,每個系統工作線程各司其職

例如rapply_worker_thread線程,他是日志重做線程,他在備機上進行日志重做,跟SQLSERVER是一樣的,SQLSERVER里鏡像、復制也有一樣功能的線程

 

管理界面就介紹到這里了,繼續講下去好像偏離這篇文章的主體,大家有興趣可以繼續深入研究


技術對比

當你對某一個數據庫研究得很深入的時候再學習另一種數據庫就會發現,大部分原理都是相通的

例如技術實現原理,還有一些概念,只是換了名詞已而

例如:

1、SQLSERVER的用戶自定義函數,在MYSQL和達夢數據庫里叫存儲函數

2、MYSQL里面的事件(EVENT),就是SQLSERVER里面的作業(JOB)

3、達夢數據庫里的動態性能視圖,SQLSERVER里叫動態管理視圖(DMV)

4、達夢數據庫里的歸檔日志文件,SQLSERVER里的事務日志文件

5、MYSQL和達夢數據庫里的表空間類似于SQLSERVER里的文件組

當然,上面的概念比較可能不太準確,如果有錯誤希望大家指正o(∩_∩)o 

 

技術對比一

數據庫備份

表空間備份

 

備份的時候,本人覺得大部分原理跟SQLSERVER都是一樣的,備份的時候,SQLSERVER會把活動日志一同放進bak文件里面

目的就是保證事務的一致性,達夢數據庫也是一樣,聯機備份的時候把歸檔日志寫入備份文件

而達夢數據庫脫機備份的意思是:因為數據庫已經脫機,沒有數據變更了,當前數據庫里的事務都是一致的,所以這時候就無需把日志寫入到備份文件里

表空間備份類似于SQLSERVER的文件/文件組備份,只備份數據庫的一部分,備份文件組的時候SQLSERVER也是需要把事務日志寫入到BAK文件

保證事務一致性

注意:SQLSERVER沒有提供脫機備份功能

 

技術對比二

數據庫還原

SQLERVER在還原的時候也是只支持脫機還原,要求不能有任何連接在連接當前要還原的數據庫,保證一致性

在達夢里也有備份鏈原理,內部的原理應該跟SQLSERVER是一樣的,詳細參考:《您真的理解了SQLSERVER的日志鏈了嗎?

在SQLSERVER里也有類似達夢數據庫的并行還原技術,在還原數據庫的時候企業版的SQLSERVER也是使用了多線程技術進行還原

下面摘抄自《SQLSERVER2012實施與管理實戰指南》

企業版的SQLSERVERR會針對上述情況做優化,主要在于下面兩點:
1、多線程并行處理重做和回滾
在企業版上,SQLSERVER會啟用多線程做重做和回滾操作。這樣做的一個好處,是縮短恢復總體時間,
讓數據庫能夠盡早上線
如果在SQLSERVER的errorlog里看到類似下面的信息,就說明SQL正在做一個比較大的恢復

 

技術對比三

數據守護

數據庫的數據保護,不論Oracle還是SQLSERVER還是MySQL,都有三重含義

第一重是Crash后重新起來,要確保數據不丟失

第二重是數據庫告訴應用事務寫入成功了,這個事務就得持久化,如果沒有告訴應用結果,則還可以丟失;

第三重是主機失敗切換時(主從切換),如何表現得和沒有切換時的情況一樣。

 

每種數據庫都有不同的數據守護技術(數據保護技術)

而每種數據庫的數據保護技術都是大同小異的

達夢數據庫的數據守護技術

連接服務名里的雙IP配置類似于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 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()