大資料的強勢浪潮,使得NoSQL資料庫吸引了眾人的眼球,不過傳統的關聯式資料庫(Relational Database,RDB)的需求一直都在。像是開源資料庫PostgreSQL在日本就有廣大的企業使用群,包括日本最大的電信公司NTT、KDDI以及軟體銀行等,不過,關聯式資料庫有效能上的原罪,因此仍要克服高並行(Concurrent)的課題,而在多人線上遊戲上的應用,這樣的考驗更加嚴峻。
日本知名線上遊戲夢幻之心Online 2(Phantasy Star Online 2)開發商ISAO,便使用開源的PostgreSQL,作為旗下所有線上遊戲的會員付費系統資料庫,會員付費系統功能包含線上付費、會員管理還有積分管理,像是玩家即時在夢幻之心Online 2中的遊戲商城購物等行為就需要存取該資料庫,統計每天的資料庫交易次數約在1億次左右。
以同步與非同步技術平衡速度與資料一致性
ISAO委託富士通開發會員付費系統資料庫叢集,富士通政府與公共系統商業本部第三系統部部長Toshihito Tsutsui表示,會員付費系統背後以4個PostgreSQL叢集負荷每天上億筆的交易次數,而這4個資料庫叢集共用來承擔1天8萬秒,平均每秒1,250次的高負荷存取。不同資料庫叢集用於會員付費系統的不同的功能,每個叢集都有1個主伺服器(Master)與1個從伺服器(Slave)。且因為資料庫擴充不易,因此他們一次就規畫了5年的容量。
由於遊戲操作的高即時性要求,資料庫主從伺服器間的複製時間,對遊戲客戶端的延遲影響也必須被考量。當玩家在遊戲中購買商品,還必須等到主從伺服器間資料同步完成才能得到回應,整個過程太過漫長,將嚴重影響玩家的使用者體驗。
Toshihito Tsutsui說,當玩家在遊戲中購買商城物品,客戶端傳送資料到後端系統存取資料庫主伺服器,待主資料庫伺服器完成作業,後端系統便直接回應客戶端的同時,同時進行從資料庫伺服器的資料複製,當從伺服器確定資料完成複製後,後端系統才會再次與遊戲客戶端同步訊息。這樣的作法能夠減少玩家的等待時間,並且維持資料庫叢集資料的一致性。
進入大資料時代,線上服務背後的關聯式資料庫,也遇到了處理大量使用者的問題,而ISAO選擇在不同功能使用不同的資料庫叢集來分散大流量的方法。
中國PostgreSQL社群發起人之一蕭少聰表示,在中國線上服務的使用者動輒數千萬甚至億人,當必須使用關聯式資料庫的時候,常見的做法是將整個大系統拆分成小功能,小功能存取不同的資料庫伺服器,再由擴充資料庫來處理更多的流量。
另外,蕭少聰也說,PostgreSQL 9.3開始完整支援Foreign Data Wrappers也能幫忙解決「大」問題,使用者可以透過這項功能存取外部資料來源,將並行的大量資料導到外部的NoSQL資料庫等大資料解決方案,藉以提升大資料的處理能力。