資料庫是平替還是改造?
早上走路30多分鐘到公司的時候發現膝上型電腦沒帶是一件很崩潰的事情,騎上共享單車跑了一趟,回到公司已經八點多了。看來週一早上要帶電腦上班這個事情還沒有形成肌肉記憶,這種事情對於已經開始健忘的年齡來說,很可能以後經常會發生。
上週五我發了一篇10年前子衿最佳化團隊的階段測試題,有些朋友希望我公佈答案。不過今天有些更想說的事情,因此公佈答案的文章還是稍後再寫吧。週五參加了ITPUB的一個關於信創替代的線上沙龍。其中討論的一個問題是信創替代,平替還是改造的問題。對於資料庫而言,我正好看到過一些相關的案例,因此發表了一些觀點。不過因為時間關係,並沒有把我想表達的所有觀點都表達出來,因此今天我想先把這一切都寫下來,否則有些思考會被我的記憶淡忘。
對於資料庫而言,信創替代中的平替是指選取與Oracle等需要替代的資料庫相容度較高的產品,在不對應用系統做較大改造的前提下實現替代;而改造則根據國產資料庫的特點,對應用系統做較大的針對性改造,實現資料庫國產化替代。就這兩種替代方案而言,改造替代肯定是成本相對較高的模式。因此國產資料庫廠商一般建議先平替遷移,然後再做少量的最佳化改造,實際上這種模式就是我所說的平臺模式。因為其成本相對較低,替代速度較快,因此也比較受到使用者的青睞。
為了看清楚二者的優缺點,我先介紹一個某行業核心系統替代的案例。這個案例來自於兩個業務基本相似的不同企業。這套系統是企業最為核心的系統,複雜度也比較高,存在大量的複雜業務邏輯的SQL,資料量也相當巨大。
在這個案例中,一個企業採用平替模式,把原來在Oracle跑的應用直接遷移到與Oracle有較高相容性的分散式資料庫上,然後針對某些不相容特性與效能存在問題的SQL語句進行了比較周密的改寫與最佳化。系統上線也比較順利,不過上線一段時間後,遇到了一些偶發性的效能與系統卡頓的問題。被迫先暫時回切到Oracle系統,然後再去定位問題,解決問題後再做切換。
另外一個企業則認為他們選擇的國產資料庫在功能、效能、Oracle相容性方面都存在一定的問題,因此決定在遷移過程中多花點時間,多花點錢,一次性完成改造切換。雖然改造週期比第一家企業要長一些,不過透過這次改造,把一些以前系統設計不合理,完全依靠Oracle強大的能力硬扛的系統功能點都改造完了。因此係統上線後相對穩定,哪怕出現一些問題也可以很快解決掉。
我想採用這兩種方式進行改造遷移,最終都能夠解決遇到的問題,完成遷移。不過對於複雜的關鍵性業務系統而言,簡單的平替似乎並不是一個特別靠譜的方案。從Oracle平替遷移過來的應用往往存在大量的問題,放到沒有Oracle穩定與強大的國產資料庫上,可能會留下太多的隱患。
我上面所說的是複雜、大型、關鍵的業務系統,在這方面企業往往可以投入較大的資金去做改造,因此改造替換比簡單平替要更好一些。不過對於海量的小型的、業務不那麼複雜的系統而言,都採用深度改造的替代方法恐怕對企業的投資來說過於巨大。因此這些系統採用平替的方案可能更為務實一些。這是目前客戶希望國產資料庫做各種相容性的主要原因。
似乎這個問題已經講清楚了,其實不然,哪怕是改造替代,也要注意一些問題。有人可能會說,既然都改造替代了,那麼讓應用去適應國產資料庫就可以了,資料庫選型可以隨意一些了。
其實不然,我還是先講一個案例。有家企業做國產資料庫替代,為了節約資金,學習網際網路企業的先進經驗,選擇了一個基於MySQL的分庫分表的方案,將整個系統拆分成了幾十個幾個MySQL資料庫。不過因為研發隊伍能力與研發進度要求等問題,對於讀寫分離,歷史資料分離等都沒在開始時候做上。甚至有些複雜業務對於只習慣寫SQL完成業務邏輯的研發人員來說也十分困難。為了實現業務,在這些庫之間還設定了大量的廣播表,用以複製那些有共享資料需求的應用。系統上線後,隨著資料量的增長,系統出現的問題也越來越嚴重,很快就脫離了研發團隊技術能力。
這個案例可以看出信創替代中的另外一個問題,那就是企業在選型資料庫與解決方案的時候,一定要選擇研發與運維隊伍能夠把控的技術路線。沒有網際網路企業的技術能力的,就不要輕易學習人家的分庫分表;沒有分散式資料庫研發與應用經驗的企業,就老老實實用集中式資料庫。
信創替代,說難很難,說容易也容易,不過做之前根據自己的能力特點,選擇適當的方案還是十分關鍵的。現在對信創這個話題,有各種觀點。我覺得每種觀點都有一定的道理。不過對於某些企業或者行業,這個工作已經是必須做的事情了,那麼就去做好了。資料庫替代這個事情,想想都是問題,不過咬牙做下去,似乎都能找到答案。
來自 “ 白鱔的洞穴 ”, 原文作者:白鱔;原文連結:https://mp.weixin.qq.com/s/L_68Uum0Ep3gj0bA0bkfMw,如有侵權,請聯絡管理員刪除。
相關文章
- 是先做資料庫設計還是先建模資料庫
- 【轉載】關聯式資料庫還是NoSQL資料庫資料庫SQL
- 資料是黃金還是垃圾?
- 查詢資料庫後是返回ResultSet還是返回Collection? (轉)資料庫
- 資料庫,邏輯刪還是物理刪?資料庫
- 究竟先操作快取,還是資料庫?快取資料庫
- 到底是先更新資料庫還是先更新快取?資料庫快取
- 檢視Oracle資料庫是企業版還是標準版Oracle資料庫
- 關於:查詢資料庫後是返回ResultSet還是返回Collection資料庫
- 應用適配資料庫還是資料庫適配應用資料庫
- 什麼是資料庫?什麼是雲資料庫?資料庫
- 管你MySQL還是Oracle,資料庫管理就完事了MySqlOracle資料庫
- 以攻為守:開源資料庫是最佳替換品(轉)資料庫
- 黃東旭:“向量資料庫”還是“向量搜尋外掛 + SQL 資料庫”?資料庫SQL
- 自動駕駛,是“平視”還是“俯視”?自動駕駛
- 大資料,還是大錯誤?大資料
- 舊ERP系統:替換還是新增?(轉)
- 部落格資料庫要連線Elasticsearch,使用MySQL還是Mong資料庫ElasticsearchMySql
- 誤刪了公司資料庫,但我還是活下來了資料庫
- 關於圖片存入硬碟目錄還是存入資料庫硬碟資料庫
- 是人為shutdown,還是異常宕庫?
- 如何檢視資料庫是專有伺服器模式還是共享伺服器模式資料庫伺服器模式
- mysqlpump淺談:mysqlpump併發的最小粒度是庫還是表,還是行?MySql
- 預測模型要大資料還是小資料?模型大資料
- 我們需要更多資料還是精確資料?
- 塔說|區塊鏈遇到資料庫:相愛還是相殺?區塊鏈資料庫
- 什麼是皇帝資料庫?資料庫
- 什麼是Cassandra資料庫資料庫
- 什麼是NoSQL資料庫?SQL資料庫
- 資料庫是如何使用鎖資料庫
- Chronicles 是什麼資料庫資料庫
- 從資料庫中拿資料庫總是拿到上一條資料,還能拿到刪除的表的資料資料庫
- 資料是什麼——資料的倉庫
- 【觀點】資料產權應劃歸平臺企業還是消費者?
- 筆記: 判斷lib庫是動態庫還是靜態庫筆記
- 大資料:大機遇還是大忽悠?大資料
- 到底是倉庫模式好,還是MVC模式好?模式MVC
- 部落格資料庫要連線Elasticsearch,使用MySQL還是MongoDB更合理資料庫ElasticsearchMySqlMongoDB