阿里雲開源數據庫項目最新發布
阿里巴巴集團副總裁、阿里雲智能數據庫事業部總裁、高級研究員李飛飛(飛刀)、阿里雲數據庫資深技術專家樓方鑫(黃忠)以及阿里雲數據庫技術專家傅宇(齊木)三位阿里雲技術專家爲你們介紹了最新的阿里雲開源數據庫項目。
李飛飛:
數據庫在過去這麼多年,尤爲近幾年發展如此迅速的核心緣由之一就是開源生態作出了很大貢獻。不可思議若是沒有開源的MySQL、PG、HBase、MongoDB以及Cassandra等,只有Oracle、DB二、SQL Server等,今天世界會是什麼樣子?那必然仍是寡頭壟斷的局面。由於核心的OLAP系統難以實現,須要通過大量試錯才能不斷完善。而開源生態爲數據庫提供這樣的一個平臺,幫助數據庫快速迭代,使得開源數據庫能夠比肩商業數據庫的能力。
對於阿里而言,AliSQL得到了2018年MySQL的社區公司貢獻獎,這是由於AliSQL作了大量優化,好比實現了Sequence、表級並行複製以及隱式主鍵等。而作這些優化的驅動力是阿里內部的業務需求,而且對於技術的優化後續就會貢獻回開源社區。
最新發布是讓DRDS支持POLARDB,而且在2020年的某個時間,阿里雲將會開源DRDS。DRDS徹底由阿里自研,其中包含了Sharding、Unique Sequence、Parallel Query、Global Secondry Index以及Distributed Transaction。但願你們可以更加普遍地使用DRDS,若是有機會也貢獻更多的代碼,將DRDS作得更好。
樓方鑫:
AliSQL經過效率、性能、自主、穩定以及安全方面的不斷改進,但願讓業務、運維、研發和合做夥伴都可以感受更「爽」。
基於這個思路,阿里雲在一年半以前就將主要精力投入到MySQL 8.0上面,這是由於MySQL 8.0更可以知足以上目標。MySQL 8.0具備Automic DDL、Instant Add Column、Window Function和Temp Engine的能力。而AliSQL在MySQL的基礎之上還作了更多的優化,好比支持了TDE加密和SM4國密算法,而且從新設計了線程池,AliSQL Cluster支持三節點並能作到RTO爲0等。
MySQL官方版本也有線程池,而AliSQL線程池的區別在於鏈接數能夠達到2萬,而且能保持很是平穩的輸出。首先,AliSQL嚴格控制了線程數來提高了CPU效率,作到了高性能。其次,AliSQL能夠一鍵隨時切換啓用線程池,而無需重啓實例。最後,AliSQL可以區分操做類型並實現智能優先級排隊,並適用於全部業務場景。總之,AliSQL的線程池是徹底從新實現的,而且性能也會超出指望。
AliSQL Cluster能夠總結出「三高」,即高可靠、高可用和高性能。AliSQL Cluster具備99.99%的可用性,事務數據具備強一致性,而且使用了Paxos智能並行發包實現高效同步。這樣的「三高」使得業務、運維和研發都更「爽」。
SQL Outline是在數據庫版本升級、增減索引、統計信息以及程序固化時來收集和編輯SQL關鍵路信息,並用持久化Hint固化執行路徑的。
AliSQL基於MySQL作了不少性能的加強,實現了對象統計,並提供了完善的指標和多級維度。好比索引、SQL統計信息都可以一目瞭然,所以能夠加速對業務的響應。這也說明在上雲以後,若是想要服務好業務,還有不少工做須要作。
AliSQL在5.6版本時作了開源,通過總結以後發現讓官方合併AliSQL 5.6這條路走不通,所以也將對於AliSQL 8.0進行開源。在開源8.0版本的時候會吸取5.6版本的經驗,想辦法更高效地維護AliSQL開源項目。
傅宇:
在阿里巴巴業務中,DRDS和MySQL是相互配合,榮辱與共的關係。DRDS是阿里雲提供的一個服務,全稱是分佈式關係型數據庫服務。DRDS功能最簡單歸納就是分庫分表,用戶能夠從DRDS接口上建立一個表,只須要在建表時指定分庫分表的方式,剩下的工做由DRDS搞定,用戶能夠像操做普通表同樣操做DRDS,業務層無需再作分佈式相關的考慮。除此以外,DRDS還提供了讀寫分離、彈性擴容等能力。
下圖是典型的DRDS部署拓撲,圖左側分爲兩層,Server層包含多個無狀態的DRDS節點,DRDS節點向Load Balancer彙報心跳,若是出現宕機,Load Balancer就會將流量遷移到其餘節點上,保證集羣高可用。存儲層可能使用RDS、POLARDB甚至列式存儲。整體來講,查詢會在Server層被轉化成執行計劃,在存儲層具體執行並返回給用戶。圖右側是DRDS的分析型只讀實例,裏面包含多個MPP Worker。對於複雜SQL,單臺機器可能沒法完成計算,此時就會將SQL的執行計劃發往MPP集羣來計算,而且不會對主庫產生影響。
DRDS的架構演進經歷很長的過程,最開始只想着如何將分庫分表作到極致。隨着DRDS上雲,企業級場景更加豐富,遇到了愈來愈複雜的SQL,需求推進着DRDS架構的重構。現在的DRDS架構最分爲了網絡、優化器和執行器。
SQL進入DRDS首先會通過Parser變成AST,以後通過Validator進行驗證,經過驗證以後轉化成最樸素的邏輯執行計劃,在通過SQL Rewriter和Plan Enumerator變爲最優的物理執行計劃,並交給Executor進行執行。
對於查詢優化器而言,SQL Rewriter會對邏輯執行計劃進行改寫,它是基於啓發式規則的優化器,也被稱爲RBO。SQL Rewriter會實現子查詢的去關聯化,並作算子Transpose,而爲了實現極致下推,SQL Rewriter還作了Join Clustering。
查詢優化器的第二步是Plan Enumerator作的物理優化,主要負責Joint Recorder和算法選擇。DRDS採用的最爲通用的Volcano/Cascades優化器,通過這一過程會拿到理論最優的物理執行計劃。
DRDS查詢優化器的優化過程是基於代價的,而代價最初計算來自於統計信息,這些統計信息將會計算代價並帶入算子Cost Model中進而計算執行計劃的整體代價。
查詢優化沒法瞬間完成,所以須要管理執行計劃,能夠將執行計劃存儲下來加以複用,提高優化速度。DRDS使用了基於Chunk的執行器,使得每一個算子一次性產出一批數據。在Chunk裏面數據按列存儲,分析速度更快,計算效率更高。Parallel Query部分會啓動多個Worker進程並對結果加以彙總。
並行處理--MySQL發展的趨勢及中國本地應用實踐
中國計算機行業協會開源數據庫專委會會長,極數雲舟CEO周彥偉爲你們分享了MySQL的基礎架構和ArkDB的並行化實踐。
MySQL基礎架構
MySQL Server引擎的好處在於你們能夠基於此實現本身的數據庫。目前,MySQL已經發布了8.0版本,能夠看到這麼多年MySQL官方其實一直在進步。MySQL在並行和提升速度方面作了不少工做。在引擎方面,最開始MySQL使用的是MyISAM,如今默認是InnoDB,這是由於MyISAM的並行處理能力不夠好,而InnoDB實現了行級鎖,還支持了MVCC,增長了並行讀寫的能力。在引擎層面,從MyISAM過渡到InnoDB是一個巨大的進步。
InnoDB的發展
InnoDB也在MySQL 5.六、5.七、8.0的演進過程當中發生了很大變化。InnoDB最先採用共享表空間,一堆表放在一個文件裏,效率極差。後來InnoDB採用獨立表空間,一個表放在一個文件裏,再後來演變到一個表分紅多個文件。這樣的變化是但願提高數據的處理速度。而到如今爲止,MySQL 8.0仍是落在單臺服務器上,只能利用單臺機器的計算和存儲功能。
如今,MySQL的進步其實就是InnoDB的進步,這在一些參數的變化上有所體現。此外,Inno DB也對Undo進行了優化,5.7以前ibdata文件中包含Undo段,致使文件空間沒法回收。5.7版本以後,Undo段從ibdata文件中獨立出來,就能夠實現並行讀寫。
不少年的時間,MySQL擴展都是基於Replication的。如今,MySQL官方也作了集羣化的處理。5.6以前是單線程複製,5.7版本中增長支持Write Set級別的並行複製。
總結而言,MySQL數據庫自身也在不斷進步,到現在MySQL 8.0版本已經作得很不錯了,可以支持複雜查詢而且效率不錯。
並行化在ArkDB的實踐
雖然MySQL官方近幾年很努力,可是依舊存在一些不足之處,所以ArkDB也但願可以基於MySQL作出一些貢獻。ArkDB在MySQL的基礎上作了大量並行化實踐。在引擎層,ArkDB實現了計算和存儲分離,經過分佈式存儲實現了並行讀寫優化。在集羣層,ArkDB實現了自適應多線程物理複製,極大地提高了數據複製效率。在接入層,ArkDB實現了對稱式中間件集羣路由,是接入層成爲無狀態的,可以承擔大規模的訪問應用。在高可用方面,ArkDB實現了去中心化分佈式哨兵守護集羣。在遷移層,ArkDB實現了多源端多通道多結構實時同步,能夠實現精確到行級的運行。
ArkDB在引擎層既基於索引樹存儲數據,又將數據分片地存儲在索引結構中。基於分佈式存儲實現了並行讀寫優化,基於索引結構實現數據並行分片,基於對象存儲實現併發讀寫支持,基於分佈式存儲支持了多副本和快照備份。ArkDB在集羣層實現了自適應多線程物理複製、物理日誌的多線程讀寫,並基於從庫的多版本控制實現了多節點無鎖同步。ArkDB在遷移層充分利用了各類並行方式,從前端多源端,到多通道處理實現了在數據打經過程中儘可能提高效率和傳輸速度。
PostgreSQL 12 迎來新機遇
Postgres中國社區主席,太陽塔科技創始人趙振平爲你們分享了PostgreSQL 12帶來的新機遇。
目前,PostgreSQL 12的開發速度很是快,今年5月份發佈Beta 1版本,6月份發佈Beta 2版本,8月份發佈Beta 3版本,9月份發佈Beta 4版本,而且有可能成爲了最後一個Beta版本,這意味着PostgreSQL 12即將正式發佈。雖然每一個Beta版本對你們而言可能只是一個小版本,但對於PostgreSQL社區而言,卻意味着大量修改,好比在PostgreSQL 12的Beta 3版本中修改了2個安全issue而且修改了40個小Bug。截止到目前,PostgreSQL 12的Beta版本總共作了161項修改,總體而言修改很是大,不少技術的修改和完善將爲PostgreSQL帶來很大的提高。並且在將來,PostgreSQL基本上每一個季度都會推出一個小版本,每一年發佈一個大版本。
現在PostgreSQL等開源數據庫正在面對新的機遇,除了數據庫領域的國產化之路,世界各地方都開始了「去IOE」。而圍繞PostgreSQL能夠作不少創新,企業能夠基於PostgreSQL開發產品,甚至將PostgreSQL和後臺產品打包銷售到國外,開發者還能夠基於PostgreSQL開發新的數據庫。而對於太陽塔這樣的公司,也能夠更好地提供PostgreSQL技術服務。
之因此選擇PostgreSQL,首先是由於它歷史悠久。PostgreSQL在互聯網產生以前就已經存在了,其創始人Michael Stonebraker得到了圖靈獎。從DB-Engines的數據來看,PostgreSQL在一路飆升。而且PostgreSQL和SQL Server等主流數據庫同宗同源,都是從Ingres衍生出來的。
從技術的角度來看,PostgreSQL也具備不少的優勢。第一點就是並行,這一能力在PostgreSQL 10時開始成熟,在PostgreSQL 11時發揮得淋漓盡致。PostgreSQL的並行能力主要體如今並行掃描、並行鏈接以及並行Append三個方面。第二點是穩定性,從版本迭代的過程能夠看出,PostgreSQL是通過千錘百煉的。第三點是安全,你們可能對於開源數據庫的安全性存在一些誤解,其實PostgreSQL是很是安全的,它提供了認證方式、通道加密和數據加密一套完整的安全機制,基本能夠認爲Oracle有多安全,PostgreSQL就有多安全。第四點是功能強大,PostgreSQL在功能上還有超過Oracle的地方,好比索引更豐富、計時功能更強大、分佈式數倉功能更加成熟。
此外,之因此說PostgreSQL會有很大機遇的另一個緣由就是它的開源協議,你們能夠隨意使用、拷貝、分發,並且能夠隨便修改,沒有任何版權風險和專利風險。所以,現在不少數據庫都是基於PostgreSQL,也正是由於它的開放協議和開放策略,提供了很大的商機。
實踐已經證實,基於PostgreSQL不只誕生出不少公司,也誕生出不少的產品,好比獨角獸公司Greenplum。此外,PostgreSQL具備強大的生態圈,國際社區的凝聚力和開發能力可以碾壓一切,PostgreSQL採用的是開放式體系結構,也就是插件結構,開發後能夠很容易地反饋社區。並且PostgreSQL的代碼和貢獻的質量都很是高。
開源數據庫在平安科技的應用實踐
平安雲數據庫及存儲產品團隊總經理汪洋爲你們分享了平安科技的開源數據庫選型原則以及應用實踐。
爲什麼使用開源數據庫
做爲一個管理着數萬億資產的金融王國,平安爲什麼要引入開源數據庫?其實,技術永遠是服務於業務和場景的。平安在2013年作完銀行新核心的「換心手術」以後,開始考慮向互聯網、數字化轉型。在這一過程當中,一方面須要高性能、高可靠、高可用的系統架構,另外一方面須要快速地捕捉市場需求,並快速轉換爲IT需求開發出產品,再投入市場進行驗證。若是使用傳統的商業數據庫,在敏捷地捕捉市場需求以後快速將產品推出市場方面就顯得捉襟見肘,這是平安引入開源數據庫的緣由之一。
在敏捷方面,微服務解決了單體架構的不少問題。第一點,單體架構牽一髮而動全身,修改風險很大,開發和測試周期很長,新功能的上線速度很慢。第二點,在單體架構中,爲了擴容某個組件或模塊須要對整個系統進行擴容,這是一種浪費,而微服務架構則能夠針對某一個服務進行擴容。第三點,微服務能夠知足不一樣技術棧開發人員的須要,不一樣團隊可使用不一樣的技術棧進行開發。
現在,一種數據庫難以適應全部業務場景的須要,須要依靠混合持久化數據庫來解決不一樣數據存儲需求。One For All時代已通過去,數據庫即使作到「大而全」,也難以涵蓋全部場景,如今要作的是「Best Fit」,針對某一種業務和負載,使用最適合的數據庫。此外,傳統的商業數據庫過於沉重,而開源數據庫則很是輕量。這些也是引入和推廣開源數據庫的緣由。此外,即使使用開源數據庫,也很難知足全部業務的需求,須要可以基於開源數據庫進行二次開發,而這也是商業數據庫沒法實現的。
開源並不意味着免費
引入開源數據庫是必然趨勢,但開源並不意味着免費。雖然License是免費的,但還須要付出其餘成本。掌握開源技術須要一個過程,須要學習成本;從商業化產品到開源數據庫的遷移須要遷移成本;遷移完成以後還可能會增長運維成本以及風險,這些成本都須要在引入開源數據庫的時候考慮。
如何選擇開源數據庫
首先要看業務場景,由於技術是服務於業務場景需求的。再看是否有合適的替代方案,好比PostgreSQL就是Oracle比較合適的替代方案。還要考慮現有開發人員的技能,不然會很是痛苦。此外,須要考慮現有數據庫的負載模式、開源社區的活躍度、市場份額以及行業知名度。另外還須要關注開發語言和數據庫類型,須要與團隊及業務場景適配。也須要關注數據庫技術的發展趨勢,好比存儲和計算分離、雲原生、分佈式等。最後一點就是不要使用太多開源產品,每類選擇一種便可。
開源數據庫引入和應用策略
引入和應用開源數據庫也有一些策略:區別現有和新建的系統,選擇不一樣策略,能夠下降遷移風險和成本。將數據庫進行分類,先從不重要的庫開始遷移,積累經驗,最小化風險。劃分不一樣的業務條線,先從要求不高的業務條線下手。實現數據庫產品引入過程當中的Owner機制,作到「術業有專攻」。制定數據庫架構、運營和開發的指南手冊。還須要對運營、開發和DBA進行培訓。針對遇到的問題持續進行架構優化,積累開發和運營經驗。還須要經過學習源代碼來快速追蹤到根本緣由,並防止問題的再次出現。若是現有功能知足不了業務需求,能夠組建研發團隊進行二次開發。最後一點就是擁抱開源社區,創建本身的生態,實現與開源社區的良好互動,進而實現共贏。
數據庫選型策略
在關係型數據庫方面,由於平安屬於金融公司,因此只要涉及到資金交易都須要極高的數據安全性和一致性以及7*24小時不間斷的服務。不涉及資金交易的則能夠根據具體業務場景選擇。在分佈式關係型數據庫方面,有兩種數據庫選型——自研的PDRS和開源的TiDB。
開源數據庫推廣成果
如今平安總共有將近三萬個數據庫實例,其中Oracle佔比很是低,Redis最多,PostgreSQL次多,也有一些MongoDB和MySQL實例。
發展路徑
總結而言,數據庫的發展路徑將來將會支持容器化部署,和K8S更好地結合,甚至實現Serverless化,也會出現更多的自研數據庫和基於開源數據庫研發新的功能。最後一點,就是在雲上能夠收集大量運維數據,進而實現AIOps。
傳統數據庫到開源數據庫遷移的工具化流程
迪思傑DSG公司創始人、總裁韓宏坤爲你們分享了傳統數據庫到開源數據庫遷移的工具化流程。
如今已經到了數據庫歷史的一個拐點,各個企業紛紛從高價值的商業數據庫走向自由的開源數據庫,而且混合架構時代已經來臨,各類數據正在快速地流動。
DSG須要服務於各類行業的客戶,而他們的系統千差萬別。DSG擁有徹底自研的技術,所以可以快速跟進各類技術的變化。DSG的核心技術優點在於幾乎可以涵蓋全部主流數據庫日誌的實時分析技術,而且創造了一種統一的數據庫數據表達語言,所以DSG可使用較少的研發資源創造很大的價值。目前對於中國而言,在數據庫方面有巨大的壓力和需求,正所以才驅動着數據庫技術走向極致。阿里如此,DSG也如此。
DSG具備強大的數據處理和複製能力,對於Oracle的遷移而言,機遇在於PostgreSQL,實踐也證實了PostgreSQL。各個企業都須要作遷移,而對於工程人員而言,能夠說「兵貴神速」,所以DSG和阿里合做對Oracle的遷移方法論作了總體梳理。Oracle遷移的客戶痛點主要有6點:
源數據庫對象關係、依賴關係複雜; 數據庫和應用改造工做量不明確; 目標庫規格不明確; 遷移割接業務停機時間短; 須要同步進行數據對比驗證; 須要數據迴流保證安全和應用回切。
對於Oracle遷移的解決方案而言,首先要經過採集和評估提早發現定位問題,不是在遷移的時候才發現問題,而應該是在遷移以前,就完成對數據庫對象關係以及應用和庫之間關係的梳理,發現可能存在的問題並做出規劃。其次要作自動兼容性識別和轉換,自動地發現不兼容的對象,並自動梳理數據庫對象之間的關係,從頭至尾自動地生成完整的遷移報告。這樣一來,用戶就可以知道本身應該負責什麼,DSG應該負責什麼。最後還能夠實現高效低干擾的增量同步和數據實時對比,DSG能夠幫助客戶以每小時300G到500G的速度進行數據庫遷移,並實現快速驗證。
阿里推出了ADAM計劃,將整個數據庫和應用遷移的流程都定義得很是清晰。ADAM提供了功能強大的採集、畫像、評估、改造以及遷移系統。ADAM的智能畫像系統可以爲用戶客觀地進行Oracle數據庫畫像,分析其特性、性能、容量以及外部依賴等並以圖形化方式展示出來。ADAM的智能評估系統可以分析數據庫對象以及SQL的兼容性,識別風險SQL,將PLSQL轉成Java以及自動對數據庫對象進行兼容性轉換。ADAM的智能改造系統則會爲用戶提供一個數據庫報告,並經過仿真爲用戶提供數據庫改造建議。
當ADAM的工做完成以後,DSG就負責打通數據遷移的最後一千米了。DSG提供了一個很是強大、完整的數據庫遷移工具,實現了以ADAM遷移計劃爲核心的完整方法論,打通了數據遷移的最後一千米。DSG能夠實現場景化、自動化、流程化的數據全量遷移、增量遷移、數據校驗、數據修正等,幫助用戶輕鬆、高效地遷移到雲上或者POLARDB一體機等。
DSG和ADAM的核心能力結合起來就可以造成Oracle遷移智能全鏈路解決方案,而且在國內的不少客戶企業中已經落地。這麼多年來,DSG一直在深耕數據遷移方面的底層技術。並且DSG for ADAM深度集成了阿里雲的技術,實現了數據遷移、數據比對等過程的可視化。此外,DSG for ADAM數據庫遷移方案對於正常業務的干擾極小,而且能夠在中間狀態、雲上雲下環境中部署。爲了打消客戶對於數據庫遷移的疑慮,DSG還提供了完善的數據迴流功能。
DSG擁有真正的底層技術,所以能夠和阿里雲一塊兒推出更多的產品和相關的服務,好比加入ETL功能加強Oracle遷移大腦,支持blob to oid等更多類型方案,異構在線DDL轉換能力,增強遷移指導評估能力,支持POLARDB、ADB等更多全新的目標數據庫等。
DSG相信將來是開源和PostgreSQL的時代,Oracle被取代的速度可能很是快。並且國家也提出了軟件國產化的要求,PostgreSQL爲核心的數據庫極可能是一個突破口,所以對於信息架構的管理人員而言應該抓緊行動。
數據遷移能力只是DSG的一部分,DSG在數據備份、容災、集成和聚集等方面也很是強大,DSG可以適應各類各樣的異構數據庫,而且能夠在數據採集和實施過程當中進行轉換,能夠幫助用戶得到數據遷移的自由。
傳統數據庫DBA到開源的技能和心理切換
雲和恩墨創始人,ACOUG主席蓋國強從天道酬勤、認識時間和大道至簡三個方面分享了DBA的學習探索之路。
如今是一個「相向而行」的時代,不管你們如何討論Oracle,可是沒有一個數據庫敢說本身超過了Oracle,而都在學習和追趕Oracle的特性。做爲技術人,不管曾經熟悉什麼技術,在這個快速變革的時代,都會面臨學習的挑戰,都會感到焦慮。現在,隨着數據庫技術的飛速發展,DBA應該進行「戰略轉移」。
天道酬勤
不管對於程序員仍是DBA而言,學習方法能夠分爲6步。第一點就是打好地基,「爲山九仞,始於壘土」,學習任何技術將基礎打牢都是前提,這樣才能靈活運用這些技術解決現實中遇到的困難。第二點是學會思考,不少人雖然學習了不少知識,可是沒有獨立思考的意識,在學習過程當中必定要學會本身設問、本身解答,這樣的歷程能夠促進本身成長。第三點是掌握方法,總有一種方法能夠幫助你加快學習速度,其中最經濟的方法就是「由點及面,由淺入深」,抓住遇到的任何一個問題,深究到源碼層,這樣由知識點到線再到面連在一塊兒。第四點是養成習慣,對於DBA而言,嚴謹是很是重要的,任何一個疏忽均可能致使災難。第五點是實踐修正,最有助於我的成長的是高壓環境,經過實踐來驗證知識體系。最後一點就是臻於至善,走過千山萬水,最後得以「見微知著,大道至簡」,能夠垂手可得地解決困擾別人已久的問題。
總結了一個學習公式:興趣+勤奮+堅持+方法≈成功。首先是興趣,興趣是最好的老師,除了癡迷於技術的人,大部分人在深刻學習時都會感到枯燥。所以在學習時,最好的方式是找到興趣,而後培養、呵護興趣,遇到挫折、打擊時不要放棄。其次是勤奮,全部作出卓越成績的人都是勤奮的。第三點就是堅持不懈,不要頻繁地調整方向。第四點就是找到適合的方法。有了這些條件就約等於成功,即便不必定真正可以作到世人看到的成功,但能夠無愧於心。
在這個時代,學習的速度慢就是退步。現在的數據庫世界能夠說是百花齊放,目前全世界有超過400種數據庫,能夠分爲關係型和非關係型,還能夠分爲操做型和分析型,這樣一橫一縱能夠分爲四大類,而進而能夠細分紅小類。今天,國產數據庫也正在崛起,這是數據庫人最好的時代。
認識時間
運用方法來加速學習,首先要從時間開始。其實在研究數據庫時,最重要的一件事情就是考慮數據庫如何計算時間。數據庫的任什麼時候間都須要度量,而在分佈式環境裏面更須要關注時間。數據庫中一般四種計時方式,邏輯的、物理的、混合的,還有全局統一時鐘TSO。數據庫須要計時的緣由有不少,如事務須要排序,MVCC須要靠時間控制等,因此時間必不可少。
Oracle數據庫是怎麼計時的呢?其實Oracle數據庫依靠SMON_SCN_TIME表計時,絕大多數Oracle修復完啓動時都會出現相關錯誤。Oracle創建了物理時間和Unix Time的對照表,所以在數據庫出故障的時候,這張表大機率會發生不一致。再進一步,數據庫如何和操做系統打交道的呢?經過跟蹤Oracle進程就會發現,它會經過gettimeofday來獲取時間。
MySQL又是怎麼計時的呢?MySQL提供了不少函數來轉換Unix Time。若是你們關注MySQL Binlog,就會發現MySQL的日誌裏面有大量Timestamp,這些就是Unix Time,這是由於MySQL在下面引用了now函數。MySQL是開源的,所以想要了解差別只須要打開源碼就能夠,所以從Oracle轉向MySQL是很容易的。MySQL使用字節存儲Timestamp,而Oracle則是將SCN做爲數據庫內部時鐘。
在PostgreSQL裏面,Unix Time無處不在。有趣的是在PostgreSQL文檔中寫道它全部的時間計算都是使用儒略曆法計算的,這個曆法從公元前4713年開始計時,理論上能夠計算到將來任何一天。
大道至簡
接觸新技術時,心理恐懼是最大的障礙。當你克服了心理恐懼就勝利了。雲和恩墨最先研究了數據庫是怎麼初始化和啓動起來的,因而就跟蹤它,最後發現Oracle是經過初始化表的引導啓動起來的。這張表指向了block file 377,後續再深刻探索讀取的文件地址。可是其實在最開始的時候就可以看出讀取的文件地址,這說明若是咱們可以跳出思惟慣性並打敗心理恐懼,就可以打敗困難。
理想中的深刻淺出是一種經歷千難萬險、峯迴路轉以後,看山仍是山的平淡。有時候能感覺到會心之意是很是難能寶貴的,運用之妙,存乎一心。咱們應該花力氣去積累、深刻、思考,而後才能舉重若輕。