“Oracle to PostgreSQL”數(shù)據(jù)庫平替項目中的關(guān)鍵點和理解誤區(qū)

Oracle to PostgreSQL的數(shù)據(jù)庫平替項目,并沒有想象中的那么難,但如果對關(guān)鍵點不加重視,或陷入理解誤區(qū),則可能使帶來很多問題甚至導(dǎo)致項目的失敗。

本文來自微信公眾號“twt企業(yè)IT社區(qū)(talkwithtrend.com)”,【作者】劉華陽,某互聯(lián)網(wǎng)金融數(shù)據(jù)庫負責(zé)人。

PostgreSQL平替Oracle數(shù)據(jù)庫項目中,應(yīng)用和基礎(chǔ)架構(gòu)運維改造是重要的組成部分。應(yīng)用改造包含數(shù)據(jù)庫對象轉(zhuǎn)換、SQL查詢的修改、應(yīng)用程序代碼更改、性能影響評估與優(yōu)化、監(jiān)控與運維的改造等,這些都是項目中需要考慮的?;A(chǔ)架構(gòu)在項目中要起到助攻的作用,配合應(yīng)用方面的改造。由于數(shù)據(jù)庫的改變,整體應(yīng)用和運維架構(gòu)需要進行評估和規(guī)劃,還包括高可用(備份、容災(zāi))方案評估與改造、后期的異構(gòu)數(shù)據(jù)庫的數(shù)據(jù)遷移工作等。

1.PostgreSQL平替Oracle數(shù)據(jù)庫對于存儲設(shè)備有哪些要求?

1)容量需求的變化與增長的考慮。根據(jù)數(shù)據(jù)庫本身的機理不同,對于存儲的容量可能有更高的要求,如表膨脹,WAL日志增量較快,更多的日志歸檔空間的需求等。

2)讀寫速度的提升需求。在項目轉(zhuǎn)換中,PostgreSQL數(shù)據(jù)庫為了更高效的處理數(shù)據(jù),對存儲系統(tǒng)讀寫速度有更高的要求,尤其需要對集中式存儲的性能要進行考量。

3)可靠性和穩(wěn)定性的要求。針對硬盤壞塊或者物理壞塊,在硬件上要有進行錯誤更正和數(shù)據(jù)冗余的方法。

這對于集中式存儲系統(tǒng)提出了一定的要求,如存儲系統(tǒng)是否有更先進的硬件設(shè)計,能夠支持更大容量存儲擴展的需求;是否采用了混合閃存、硬盤驅(qū)動器等多種存儲介質(zhì);是否具備靈活擴展的能力,能滿足數(shù)據(jù)庫在存儲擴展中的線性擴展要求。在性能方面,存儲中是否有高速的處理器和全互聯(lián)交換網(wǎng)絡(luò)(如25G、100G RDM網(wǎng)卡)、提供更高數(shù)據(jù)的傳輸效率;是否通過高速的緩存系統(tǒng)降低數(shù)據(jù)讀取的延遲;是否采用冷溫?zé)岫鄬訑?shù)據(jù)管理的策略,避免出現(xiàn)物理壞塊的情況;以及讀寫均衡策略疊加大比例EC以避免物理壞塊帶來的影響等等,都需要在項目進行中進行考量,這也是項目中基礎(chǔ)運維改造需要進行分析和改善的部分。

2.PostgreSQL平替Oracle數(shù)據(jù)庫中應(yīng)用改造需要考慮哪些角度?

需要分析使用Oracle數(shù)據(jù)庫的軟件項目的特征有哪些,了解應(yīng)用改造的需求,并從源頭對項目進行更深入的了解和分析:

2.1軟件開發(fā)角度

基于Oracle數(shù)據(jù)庫的軟件開發(fā)項目有以下部分特點:

1)以基于Oracle為中心的數(shù)據(jù)庫開發(fā)為主導(dǎo)思想的項目,與Oracle數(shù)據(jù)庫綁定比較深入,如部分程序的實現(xiàn)是通過存儲過程來進行實現(xiàn)的,或由于早期的軟件項目中網(wǎng)絡(luò)部分并不發(fā)達,考慮網(wǎng)絡(luò)帶寬方面,軟件項目的主要程序都避免進行大量的交互,而是將程序集中通過存儲過程組織,通過應(yīng)用程序調(diào)用數(shù)據(jù)庫中的存儲過程來實現(xiàn),減少數(shù)據(jù)傳輸。

2)在基于Oracle的應(yīng)用程序中,表設(shè)計和SQL語句的形成多使用傳統(tǒng)的三范式設(shè)計模式,數(shù)據(jù)的訪問和提取等都設(shè)計多個表的關(guān)聯(lián)查詢,甚至有部分應(yīng)用程序的數(shù)據(jù)準(zhǔn)確性都是通過數(shù)據(jù)庫來完成的,如CHECK輸入數(shù)據(jù)庫表的字段值是否符合要求,通過約束來保證整體應(yīng)用的數(shù)據(jù)輸入的正確性或范圍性。

3)單表的數(shù)據(jù)量在基于Oracle的項目中,可能有較大數(shù)量的情況,同時也有的表已經(jīng)做了分區(qū)表等方式,并且需要進行多個硬件存儲分擔(dān)數(shù)據(jù)存儲和性能的平衡等,使單體數(shù)據(jù)庫能完成數(shù)據(jù)處理的日常工作。

2.2運行維護角度

1)Oracle數(shù)據(jù)庫在國內(nèi)的運行維護環(huán)境是較好的,大部分公司雇傭的Oracle數(shù)據(jù)庫管理員都有相關(guān)的培訓(xùn)認證,同時由于Oracle曾經(jīng)在國內(nèi)流行,相關(guān)的知識體系也比較完整。

2)Oracle數(shù)據(jù)庫本身自有的數(shù)據(jù)庫性能分析功能、第三方分析軟件,以及相關(guān)功能腳本都比較完善,有著一整套成熟的工作模式和分析方式。

3)Oracle運行維護的人員素質(zhì)較高,在招聘市場上,高中低端的人才都有充足的儲備。

4)在大型項目中,Oracle數(shù)據(jù)庫基本上統(tǒng)一建立在集中式的存儲中,如SAN存儲,通過SAN存儲方式可以快速的進行高可擴展性和可靠性。通過先進的SAN存儲來提供更快速的數(shù)據(jù)庫響應(yīng)速度。

2.3成本角度

1)使用Oracle的軟件項目主要考慮的是數(shù)據(jù)庫本身的版權(quán)費用,以及每年可能償付的維保費用。

2)安裝使用數(shù)據(jù)庫的硬件費用和災(zāi)備容災(zāi)的費用,以及匹配的一些商用的Oracle備份的軟件費用,如果還有異地災(zāi)備,那么相關(guān)的費用會更高。

因此,初期基于DBA轉(zhuǎn)型的培訓(xùn)費用和商用的PostgreSQL運行維護的軟件費用,或?qū)I(yè)的PostgreSQL外包維護的費用都應(yīng)該被考慮進維護成本中。

小結(jié):實際上從軟件開發(fā)角度和成本角度來看,PostgreSQL在支持存儲過程函數(shù),以及與Oracle相同的數(shù)據(jù)表存儲方式上,在前期都是較好的Oracle平替數(shù)據(jù)庫的選型方案,但項目的分析和評估的工作仍然是應(yīng)該進行的。

3.企業(yè)在對核心應(yīng)用系統(tǒng)進行數(shù)據(jù)庫更換前應(yīng)做什么樣的準(zhǔn)備?

在數(shù)據(jù)庫平替選型的工作前,需要確認在這項工作中的難點是什么,企業(yè)是否可以在這樣的平替項目中獲得更大的利益或者減少成本付出。

  • 除了在技術(shù)上的付出和研究以外,最重要的一點是企業(yè)的一把手對該項目的理解和支持,在不少IT項目中,高層管理者并不理解相關(guān)的工作的意義,并且對于項目本身的難度也不了解,這樣在項目中后期會遇到推進較慢的情況。
  • 有足夠的成本預(yù)算針對中大型應(yīng)用系統(tǒng)更換核心數(shù)據(jù)庫過程中可能付出的成本,并有這樣的預(yù)期。
  • 有針對新數(shù)據(jù)庫特性有一定了解的研發(fā)團隊和有針對新數(shù)據(jù)庫的運維維護有一定經(jīng)驗的DBA或相關(guān)人員。

總體來說,一個核心應(yīng)用項目更換數(shù)據(jù)庫本身就要做好相關(guān)的人員準(zhǔn)備、資金準(zhǔn)備、相關(guān)的時間成本付出的準(zhǔn)備,以及企業(yè)業(yè)務(wù)決策與技術(shù)決策部門的合作。

4.適合Oracle to PostgreSQL平替項目的應(yīng)用程序有什么特點?

對這些特點了解越多,平替項目成功的概率就會越高:

  • 應(yīng)用程序有明晰的應(yīng)用程序的開發(fā)的說明,尤其針對Oracle中存在的存儲過程的說明,函數(shù)說明;
  • 應(yīng)用程序中無深度使用Oracle獨有的功能的部分,如Oracle中的自主事務(wù)處理、物化視圖等;
  • 應(yīng)用程序中基本沒有使用嵌入式的Oracle PLSQL語句,或使用Oracle特定的OCI或JDBC類型;
  • 應(yīng)用程序在數(shù)據(jù)庫表中的數(shù)據(jù)量適中(10TB),而不是數(shù)據(jù)量超巨大;
  • 應(yīng)用程序服務(wù)的業(yè)務(wù)有固定的停機時間,或進行切換的情況下可以進行停機切換。

5.數(shù)據(jù)庫平替項目中的工作只是DBA的工作嗎?

在基于Oracle的平替項目中,尤其針對以PostgreSQL作為數(shù)據(jù)庫承接的對象,經(jīng)常聽到這樣一種誤區(qū),即Oracle to PostgreSQL的數(shù)據(jù)庫平替項目中的工作只是DBA的工作,或僅僅局限于數(shù)據(jù)庫的數(shù)據(jù)遷移。不少項目的管理者,在進行這項工作時的思維很有可能受到這個思維定式的局限,認為平替與其他部分無關(guān)。實際上,Oracle to PostgreSQL的平替項目需要各方面的支持和前期工作。

整體的項目工作流程設(shè)計、項目難點的前期調(diào)研等,都需要進行多方的論證和考量。其中主要需要思考平替項目的本身的成本預(yù)估,項目后期的運維的難點和成本,以及整體的工作時間成本,是否存在技術(shù)難以突破的點,這些都是前期的分析中要擺到桌面上的問題,需要進行分析和討論后,再進行實施。項目成功與否,重點在于前期的重視和準(zhǔn)備程度,以及業(yè)務(wù)部門的支持和理解等。

6.平替項目中需要深度了解PostgreSQL的數(shù)據(jù)庫原理嗎?

這實際上是一個容易被忽視的問題,PostgreSQL和Oracle不是一個數(shù)據(jù)庫原理設(shè)計的理念,尤其PostgreSQL相對于Oracle、MySQL在MVCC多版本控制中的差異,讓開發(fā)者在使用PostgreSQL過程中的開發(fā)注意事項與Oracle大相徑庭。同時也需要觀察項目的大小以及業(yè)務(wù)的重要性,判斷在前期是否需要有深入理解PostgreSQL數(shù)據(jù)庫原理的開發(fā)人員和運行維護人員加入,盡量事前避開可能的問題點。比如,如果PostgreSQL對于存儲的速度有更高的需求,或如果原有的存儲系統(tǒng)使用了DAS存儲或NAS存儲,則在此次數(shù)據(jù)庫切換項目中,需要考慮替換存儲系統(tǒng),使用更先進的SAN存儲,為遷移在硬件性能上提供更多的保證。

640 (3).jpg

圖1:DAS存儲NAS存儲SAN存儲

7.平替項目中的開發(fā)人員在項目成敗中的重要性

在Oracle to PostgreSQL的平替項目中必然存在修改應(yīng)用程序代碼的問題,同時可能涉及業(yè)務(wù)邏輯輕度或深度修改的問題,如原有的Oracle的功能不能在PostgreSQL中實現(xiàn),需要通過修改程序代碼來完成和填補其中的“虧空”,同時如果將壓力全部積壓到PostgreSQL數(shù)據(jù)庫本身,完全通過數(shù)據(jù)庫自身的功能完全覆蓋Oracle的特殊功能范疇,將有很大的難度和產(chǎn)生后期運行故障的概率,在部分切換項目中,如程序為購買,并且已經(jīng)脫保,這樣的項目失敗的可能性較大,而公司自主開發(fā)的,或有軟件的維保商,并支持二次開發(fā)的,這樣的項目成功的概率較大。

8.運行維護是平替項目的中的關(guān)鍵

前期需要設(shè)計數(shù)據(jù)庫高可用架構(gòu)匹配適合的硬件配置如SAN存儲系統(tǒng),后期需設(shè)計匹配PostgreSQL數(shù)據(jù)庫的運行維護監(jiān)控的系統(tǒng),包括監(jiān)控指標(biāo)、操作流程與SOP文檔和常規(guī)操作命令等諸多問題。運行維護是項目上線后3-6個月成敗的關(guān)鍵,如備份的方式轉(zhuǎn)變,數(shù)據(jù)恢復(fù)方式的改變等,在遇到基于PostgreSQL核心技術(shù)的轉(zhuǎn)變后的技術(shù)問題、性能問題,以及快速發(fā)現(xiàn)問題和解決問題等都是運行維護需要關(guān)注和進行相關(guān)工作的部分。

結(jié)語

Oracle to PostgreSQL的數(shù)據(jù)庫平替項目,并沒有想象中的那么難,對于相關(guān)項目需要注意的部分可以總結(jié)為以下幾點:

1)項目前期要重視,與相關(guān)部門達成一致;

2)項目前期提前規(guī)劃存儲系統(tǒng)替換、擴容或升級;

3)項目前期需調(diào)研,PostgreSQL運行原理要弄懂;

4)項目前期需要規(guī)劃整體架構(gòu);

5)項目前期列出項目中無法進行平替的功能點,通過其他的方式來解決;

6)項目前期運行維護需投入,避免項目上線再解決;

7)項目上線前應(yīng)做POC,發(fā)現(xiàn)性能問題及時解決和改造;

8)項目后期持續(xù)觀察發(fā)現(xiàn)問題,運維能力需跟上。

THEEND

最新評論(評論僅代表用戶觀點)

更多
暫無評論