如何緊急恢復SQL Server數據庫文件
導讀:很多公司都在開發自己的分布式數據庫架構,且不少公司都可能使用上了,也有很多人在講分布式數據庫架構,這些是真正意義上的分布式數據庫嗎?
若要我加一個詞的話, 我一般說偽分布式或者說所謂的分布式數據庫架構,是跟陳國慶分享的NoSQL一樣,只是起一個簡單且好聽點的名字,之所以談這個話題,就是想與大家分享一下個人對偽分布式數據庫架構的理解及所實踐的。
PPT主要的內容主要有幾點:什么是分布式數據庫;什么是偽分布式數據庫;分布式和偽分布式數據庫架構的優缺點;偽分布式數據庫架構適用的場景;二種偽分布式數據庫架構的設計思路,一類適用于電子商務等領域,另外一類適合于SNS游戲等領域。
首先申明二個要點:第一點不支持分布式事務的,肯定不是分布式數據庫;第二點分布式強調的是強調可用性、可靠性和數據一致性,數據一致性又分松散一致性和嚴密一致性,因為分布式數據庫有不同的實現算法,為此數據一致性都有各種差異。
接下來,我們看一下分布式數據庫的定義:由一組存儲在網絡中不同服務器上的數據組成,網絡中每個節點具有獨立執行局部應用的能力,也可以通過網絡通信系統執行全局應用的能力。
為什么需要偽分布式數據庫產品?是因為集中式數據庫,當數據量越來越大,數據的讀寫量也越來越大,且無法通過垂直增加或升級硬件設備而滿足的,以及越來越成為業務增長的瓶頸,我們就不得不考慮革新,適用一種更加有效、可行的方案解決。
偽分布式數據庫的應用場景,稍微羅列了下:電子商務平臺(C2C、B2B、B2C) 、SNS平臺、IM即時通信軟件、電子郵件系統、日志分析系統、SNS游戲、其他平臺型網站。
大致總結了下,使用偽分布式數據庫架構場景的三要素:
- 大數據容量,且垂直升級擴展受限的;
- 高并發事務型的;
- 數據更新量遠大于數據讀取,且數據更新量非常大;
接下來我們看一下分布式數據庫一個最獨特的架構圖,但是看之前,先了解下分布式數據庫的四個是核心模塊。我們把四個名詞解釋一下:
什么叫局部數據庫管理系統;
什么是全局數據庫管理系統;
什么是全局數據字典;
什么是通信管理;
l LDBMS
建立和管理局部數據庫,提供場地自治能力,執行局部應用及全局查詢的子查詢;
l GDBMS
提供分布透明性,協調全局事務執行,協調各局部DBMS完成全局應用,保證數據庫全局一致性、執行并發控制、實現更新同步和提供全局恢復等功能;
l 全局數據字典
存放全局概念模式、分片模式、分布模式的定義以及各模式之間映像的定義,存放有關用戶存取權限的定義,保證全局用 戶的權限和數據庫的安全,存放數據完整性約束條件定義;
l 通信管理
實現分布式數據庫各場地之間消息和數據傳遞;
這是分布式數據庫最復雜的一種結構,每個節點都有一個全局數據字典和全局數據庫管理系統,但市場上的產品中都不會使用這種架構。因為此架構的分布式數據庫產品的實現技術難度高,各個節點之間通信和管理成本高,好處就是全局數據庫管理系統和全局數據字典不會成為單點,為此市場上的產品多是采用多個全局數據庫管理系統和全局數據字典解決單點的問題,但不是每個節點都用。
接下來回到我們的重點:什么是偽分布數數據庫架構,大家千萬不要像迷戀NoSQL一樣迷戀偽分布式這個名字,同一個道理。偽分布式我簡單的理解就是多個集中式數據庫,再加上數據庫自身復制,最外層再加上開發的軟件和一些其他的組件;
分布式數據庫的優點蠻多的,大致羅列了四點:
1>.數據獨立性:數據邏輯獨立性、物理獨立性、分布獨立惡性;
2>.適當數據的冗余,實現高可用性;
3>.集中和自治相結合的控制結構;
4>.全局的一致性、可串行性、可恢復性;
一個產品有優點,其自然也會存在一些負面的,大致如下:
1>.部署復雜,對硬件、網絡等環境要求更高;
2>.事務、數據查詢性能相比較下降;
3>.商業產品費用較貴,開源產品暫時存在瑕疵;
4>.技術實現復雜,開發成本高;
那接下來我們繼續談下偽分布數據庫架構的優缺點。偽分布式的優點就是提供了類似分布式數據庫的數據庫透明性;解決集中式數據庫的擴展局限性;能夠提高數據的訪問性能、可用性和可靠性,因為把很多數據拆到很多不同的服務器上,數據被打散了,而且現在PC服務器的處理能力非常不錯,可以通過偽分布式數據庫架構提供的自動切換功能,使得可用性和可靠性有保障。
偽分布式數據庫架構的實現技術也不難,有很多現成的方案,開發成本也不高。而且我拆分了數據庫之后,可以用一些自動化的工具模塊,使對數據庫的維護成本可控的。
偽分布式數據庫架構也有其缺陷:
1>.不支持分布式事務 ;
2>.數據拆分之后出現數據合并難度與部分功能限制 ;
3>.數據庫設計技巧難度加大 ;
二種通用偽分布式數據庫架構都大致有組建,信息如下:
u 前端通信協議:MySQL通信協議、JSON協議;
u 后端通信協議:MySQL通信協議;
u 存取路由算法控制器:HASH值法、數據庫路由表法;
u 連接池:數據庫連接池、應用程序連接池(可選);
u 負載均衡:客戶端調用API接口;
u 解析器:SQL解析器、JSON字符串解析器;
u 查詢結果集合并緩沖區;
u 序列生成器;
u JSON字符串操作合并隊列服務;
u MemCache管理模塊;
u 第三方平臺ID轉換器;
u 數據庫可用性探測模塊;
u 命令行管理接口;
稍微解釋幾個模塊,及重點解釋數據存取的路由法則和序列生成器,我們先說下應用程序與偽分布式數據庫架構的通信模塊,前段應用程序都是連接到這個數據中間件上,然后通過數據中間件訪問數據庫,完成數據的讀寫操作。
數據庫可用性探測器就是通過做一個UPDATE操作的方式檢測數據庫服務是否正常,使用修改命令的原因是MySQL HANG會有很多種情況,但是一定無法完成寫操作。
命令行管理接口,可以根據數據庫可用性探測器或人為發送的命令,完成一些操作,比如數據庫服務從A服務器轉移到B服務器,那么就可以發送一個強制切換命令。
查詢結果集合并緩沖區主要為彌補因數據打散而存在數據合并的需求,比如一個查詢操作需要操作多個庫,那么SQL解析器會拆分成多條SQL執行,然后結果集在此緩沖區合并,甚至還可以再做一些如排序、分組統計等操作。
負載均衡模塊,我們需要提供前端應用程序訪問數據中間件的驅動模塊,那么我們可以把負載均衡的模塊集成進去,前端只需要配置數據中間件服務器的IP及連接信息即可,尤其自動完成命令發送到哪臺中間件服務器。
……
我們再深入到之前說的二個模塊,第一個是數據路由的存取算法,第一類我們是:HASH值法;第二類是:路由表法。
HASH值法,一般是根據用戶UID算出一個0~1023的值,根據用戶ID好處就是可以把一個用戶的數據盡量存儲在一塊,方便讀寫操作。我們要根據現有數據容量、數據庫服務器負載、業務數據增長等信息,預先確定要劃分為多少段,比如我們把0~1023劃分為128段,也就是把用戶數據劃分到128個數據庫中存儲起來,然后每次數據的存取,就根據SQL語句中的擁護ID計算及存儲的位置,把SQL語句或事務發送到對應的服務器上執行;
路由表法,一般是有一張表存儲用戶ID,及存儲其的數據庫ID,還有一張存儲數據庫訪問信息的表,大致如下圖:
稍微解釋下,為啥uid_dbid_map表中還有一個字段:third_uid,主要是因為像SNS游戲,多是接入到第三平臺,而各個平臺為不使外界通過此猜測出其有多少注冊用戶及`安全,給我們的ID都是非常奇怪的,為了程序通用、性能等,我們對第三的ID一律作MD5運算,然后存儲起來,在玩家操作過程中,使用內部ID進行數據的操作。
接下來我們繼續深入談下自增序列器模塊的作用,想實現:
l 實現MySQL自帶的字段值自動增長等效的功能;
l 同一應用集群中數據庫表的自增類型字段值具有全局唯一性;
l 支持數據庫級別的水平拆分表,同時還需要支持數據庫內部的表再次水平
拆分,其ID值都來源于同一條配置記錄;
其表的結構如下:
對于涉及自增類型的表,在此配置一條記錄,主要有表明成、表在一個數據庫內部拆分的數量,自增起始值,增長的步長。有些情況下,需要內部再分表主要是考慮到一些表的數據容量可能會變成很大,而MySQL做表的變更會阻塞數據的寫操作,若是較小的表,就可以更快完成變更操作。前端應用程序可以選擇啟動或用完之后一次性向中間服務器申請10000個ID值域,這樣可以避免每用一次都取 而提高效率。
上文中詳細給大家介紹了關于如何緊急恢復SQL Server數據庫文件,由于SQL Server數據庫中的數據都是非常重要的,具有高度保密性,一旦丟失會造成很大的損失,希望大家能熟練掌握緊急恢復SQL Server數據庫文件的方法,能幫到大家我就很高興啦。
【編輯推薦】