東方航空營銷領域IT架構師童帥華表示,為打造東方航空新一代電商系統,希望後臺資料庫除了要有關聯式資料庫的查詢的方便性,還想要NoSQL資料庫處理大量資料的速度,最後選擇了MongoDB。

圖片來源: 

iThome

中國東方航空2015年初開始打造全新航空電商系統,選用了可橫向擴展的NoSQL資料庫MongoDB,7月部分系統已上線,預估目標要能承載一天10億次資料庫查詢,而開放的部分先供旅行社以及平板平臺做航班搜尋,以3臺伺服器撐住每日500萬次查詢量。

過去,顧客在網站上訂購機票,平均資料庫查詢200次就會下單訂購機票,但是現在平均要查詢1.2萬次才會發生一次訂購行為,同樣的訂單量,資料查詢量卻成長百倍,新的消費型態迫使東方航空尋求新的解決方案。東方航空營銷領域IT架構師童帥華表示,航空業跟金融業一樣,採用新科技的態度比較保守,所以一開始先評估了Oracle關聯式資料庫。

東方航空航班資料庫每秒鐘都要接收500筆左右的資料更新,資料來自中國全球分銷系統GDS(Global Distribution System),航班資料一有變更就需要馬上同步,整個過程必須經過查詢、比較、計算以及插入等動作,他們所評估的Oracle資料庫明顯無法負荷,因此轉而擁抱NoSQL資料庫。

高度支援JSON讓NoSQL比RDB更易於搜尋

不過,NoSQL資料庫的選擇也很多,東方航空評選目標是要兼具關聯式資料多鍵值查詢的方便性,又能有NoSQL資料庫處理大量資料的速度。童帥華說,MongoDB對於JSON(JavaScript Object Notation)格式有良好的支援度,使用者能在資料表中嵌入資料檔案以支援一對多表格關係(One-to-Many Relationships),且MongoDB支援2級索引,即使資料檔案的格式沒有事先定義,也能讓資料庫直接搜尋這個檔案內部的資料。

飛機航班的機位庫存資料庫設計十分複雜,機場對機場直飛以及有中轉的所有航班加起來,東方航空一年有上億班次,每個班次都有26個艙等,每個艙等都有其庫存,以傳統關聯式資料庫的設計方式,需要有一個主表格與數個子表才能完整描述航班機位庫存資料。但是由於每個航空公司對於航班屬性的描述不盡相同,想要找一套能通吃所有航班紀錄的資料表設計非常困難,因此就會無法使用那些不在事先定義的航班資料檔,還有可能發生例外問題。

而MongoDB在資料表中儲存JSON格式的檔案,搭配二級索引功能,就能取代多子表的資料庫設計方式。MongoDB高級方案架構師唐建法表示,關聯式資料庫雖然也能將檔案存進資料表中,但是僅能使用Blob(Binary Large Object)格式,這種格式對於資料庫來說是黑盒子,無法對檔案內容進行搜尋,使用者需要從資料庫讀取出來,再用程式解析成需要的資訊。

東方航空公司PSS項目組資料庫架構與DevOps工程師黃翀表示,這個做法不只是適用航空業,也能運用於金融以及保險業資料庫常見的主表與多子表設計。

MongoDB橫向擴展的能力,不只能讓資料庫儲存大量資料,也能具備承載瞬間大量系統存取的能力,MongoDB高級方案架構師唐建法說,已知最大規模的使用案例有600個MongoDB節點,大約100個節點,就能提供系統每秒120萬次的存取,東方航空目前初期僅有3個節點,未來還有很大的擴充空間。

他補充,關聯式資料庫是70年代的產物,當初的設計是在單一機器上執行,因此硬要橫向擴展成叢集架構,整體IOPS反而會比不上在單一機器上執行的效能,而他認為,市面上目前並沒有達產品(Production)等級的關聯式資料庫叢集。

 


Advertisement

更多 iThome相關內容