Nownews克服使用MongoDB後,不能使用關聯式資料查詢的困境,決定使用EFQ查詢方式改寫模組,並自己寫API進行新聞資料關聯。

臺灣新聞網站Nownews(今日傳媒)平常每天新聞的網頁瀏覽人次(PageView),少則一百萬,多則上千萬。面對這麼龐大的瀏覽人次,今日傳媒創新研發部前副理傅世魁日前在2014 Taipei DrupalCamp的分享會中表示,在不改變使用者使用習慣下,搭配自己重新改寫的模組以及自行撰寫的API程式,做到連美國白宮都放棄的整合難題,在Drupal平臺徹底發揮MongoDB快速存取的功能。

完成連美國白宮都放棄的艱鉅任務

Nownews面對新聞瀏覽人數越來越多時,為了提供更好的網站效率,決定將原本PHP網頁開發程式搭配Oracle(甲骨文)資料庫的網站形式,重新採用開放源碼的方式改版,並因應前臺和後臺的使用習慣,將網站系統一分為二,但仍使用同樣的資料庫。

傅世魁表示,改版的前臺網站改用效能較快的Node.js來開發前臺的網路服務,主要是作為新聞資料的讀出;後臺主要是寫入各種新聞採訪內容,採用開放原始碼的Drupal作為主要的內容管理平臺(CMS)。為了加速開發流程,他說,前臺和後臺系統是同步進行開發,但還是使用同一個MySQL資料庫。

由於Node.js開發的前臺系統效能很好,Nownews便擔心使用Drupal的後臺系統效率跟不上前臺系統,為了加速整個網站資料庫讀取的速度,當時,部門主管便開始思考,要將原本正在使用的MySQL資料庫,改為效能較快、可以因應同時有大量資料寫入的NoSQL分散式資料庫MongoDB。

傅世魁當時接到這個任務時,心中是非常不安的。他指出,因為MongoDB並不是Drupal預設的資料庫,當時雖然找到一個模組,可以加入MongoDB的資料庫使用,但問題在於,MongoDB本身雖然是一個Big Table、文件導向的資料庫,可以採用簡單的查詢語句,但最終的關鍵在於「MongoDB沒有Join操作,沒有辦法做像是MySQL資料庫的關聯式查詢。」他說。

之前,美國白宮曾經宣布採用Drupal 7.x版搭配MongoDB資料庫,架設「We The People」請願網站。這個白宮架設的請願網站,每一個請願必須有25,000人以上的連署才能成案,在時間截止前,都會面臨在短時間內,請願網站會出現大量的連署人數。因此,白宮當時為了追求更好的資料存取效能,就決定改用MongoDB。新資料庫雖然帶來效能提升,但請願網站無法承受加入MongoDB資料庫後,只能進行分散式查詢對系統帶來的複雜度,於是,白宮最終決定對外宣布,放棄使用MongoDB,重新改用MySQL作為網站資料庫。

傅世魁表示,網站改用MongoDB最大的缺點就是,原本在MySQL資料庫中所使用的各種規則、各種查詢的View、原本的SQL查詢檢索全都失效,所有關聯資料庫和查詢模組,必須因應MongoDB特性改以EFQ(Entity Field Query)方式改寫。

加入MongoDB後,原本在Node.js中的主資料,包括標題、內文和貼上時間等,都還在MySQL資料庫中,但是,新建立的所有欄位則都在MongoDB內。他說,原本新聞查詢View的方式,只能見到主欄位,而EFQ查詢方式改寫後的模組,雖然可以看到所有欄位,但經常看不到主欄位。他坦言,使用MongoDB後,有很多網頁畫面要重新客製化設定。

Nownews用Node.js寫的前臺系統放在亞馬遜的雲端服務平臺,平常就已經設定好許多的映像檔,一旦新聞瀏覽流量突然加大,就可以立即啟用新的伺服器提供服務;至於後臺的Drupal則放在臺灣的資料中心存取資料。

他指出,當時從舊網站將資料搬到新網站時,有考慮使用既有Migrate或者是Reset API升級模組,直接把原本的資料拷貝到新的網站平臺,但問題是,多數的新聞資料本身都有很複雜的關聯性,改用MongoDB後,原本的關聯式查詢都失效,除了要重新改寫模組外, Nownews決定自己寫API,便利前臺和後臺系統可以更自由的關聯相關的新聞內容。

Nownews可以克服白宮使用MongoDB面臨的困難,傅世魁認為,是因為加入了許多人工改寫模組和寫API的心力,Drupal預設無法使用MongoDB的問題並沒有真的被解決。他說,只能等新版Drupal是否可以改善,才是真正改善之道。

 

@更正啟示:2014年9月24日更正「每篇新聞的新聞瀏覽人次」為「每天新聞的網頁瀏覽人次(PageView)」。

熱門新聞

Advertisement