MongoDB帮助东方航空打造新一代电商平台

转载自:http://www.ithome.com.tw/news/98087

相中MongoDB兼具关联式资料多键值查询的方便性,又有NoSQL资料库处理大量资料的速度,中国东方航空决定采用MongoDB来打造新航空电商系统。

1111东方航空营销领域IT架构师童帅华表示,为打造东方航空新一代电商系统,希望后台资料库除了要有关联式资料库的查询的方便性,还想要NoSQL资料库处理大量资料的速度,最后选择了MongoDB。

中国东方航空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)等级的关联式资料库丛集。

发表评论