2010年11月12日 星期五

[DEVBLOG] 數據庫的問題

開發持續,並且緩慢的進行中...
目前在解決的是關於EVE的數據庫的問題.

由於CCP有公開遊戲中所使用的大部分的資訊,所以比方說以星系的ID來查他的名字之類的處理本身是很簡單,不過有很多技術上的問題要解決.

1.效率
API能取得的都是CODE,要拿到名字一定要去DB找,但是由於一個畫面往往會需要去查幾十次的名字所以不可能單純的每次去查數據庫,而需要考慮別的方法.

2.數據的保存方式
由於GAE不提供數據的匯入匯出,所以光是把數據放上GAE就是個不小的考驗....EVE的dump有個50M左右,要弄上去需要的時間也不少.(當然,裡面需要的可能也不多就是)

光是這兩個問題到是還簡單,不過在解決他們的時候又碰上了GAE上的技術限制導致這個問題蠻複雜的.

  1. GAE在一定時間之內沒人訪問的話會自動停止,等下一個人來在重新開始. 這代表不能單純的把系統架構成在server啟動時建構數據的快取,不然訪客會等到死
  2. 每次的Query只能取1000條數據,而且不提供你直接取得後續數據的方法,所以光是把一個10000條的資料放到記憶體上都很麻煩
  3. 每次的HTTP Request限制30秒超過報錯,所以所有系統所需的處理都不能寫成花很長的時間一次做完那樣單純.
  4. GAE的數據庫(Bigtable)不能用join等RDB的功能
結論是,只有隨機應變.
目前是去抓了Database Dump的Mysql版在本地先架好,像是有各種名詞的evenames(366086行),各種物件的數據的invtypes(18668行)  這些就寫個小程式把他們給做成class或是properties檔給傳上去,其他需要的數據也都事先做好view再傳上去,減少在GAE上給數據加工的負擔.

基本上,這問題已經快要解決了


接著來說些對不搞開發的人也有興趣的話題...

在檢查EVE的Dump時發現裡面有EVE的多國語翻譯的數據在裡面,量還不小耶(271382條)

想說來了解一下各國語言的翻譯狀況,原來中文的翻譯還算蠻進步的啊(陸服還在嗎?)
日文也翻譯到差不多一半了,可是反而搞到新手教學那段的日文都沒有了不知道事怎麼回事...

希望CCP哪天能大發善心來提供一下日文或是中文版啊.....反正多國語的架構一弄好,多一國也不需要多少資源.

2010年11月1日 星期一

[DEVBLOG]Eve Online的線上工具

Eve這個遊戲,因為他的基本架構以及公司的方針和其他網路遊戲大不相同,所以也玩家的族群也感覺上跟其他遊戲比起來,搞系統開發的朋友不少.
vivio本行也是搞開發的,由於現在在開發的東西一來技術上可能還蠻有趣,二來也希望能得到大家的意見,因此今天來寫一篇一般玩家可能比較沒興趣的東西

先來說說事情的由來.....


EVE ONLINE裡面玩家基本上是以透過Corp組織來聯繫的,由於Corp系統會管理到很多東西,像是POS啦倉庫啦BPO啦等,所以他的介面自然就很複雜,往往為了一點簡單的設定就要搞個半天.

但是即使是他已經很複雜的介面還是有很多大家需要卻沒辦法提供的功能,在LIB的管理上就發生了不少問題,有的問題是可以透過一些技巧可以克服的,但是以下幾個問題一直讓人煩惱(尤其是POS的管理員)

  1. POS燃料的現況要到當地才看得到
  2. POS沒燃料的24小時前開始發出的Alert Mail只有CEO和Director收的到.
  3. 各燃料庫存剩下多少也要到當地才看的清楚

1跟3基本上是透過API取得的資訊就可以查到,透過一些像是EVE Asset Manager的工具也不是看不到,不過問題是每個玩家只能收到自己能有權限能看到的資料,而CEO的FULL API KEY又不是隨便可以給人的.
至於2就更麻煩,由於不能透過API取得系統的Alert Mail(下次改版預定提供MAIL讀取機能,不過包不包含系統MAIL就還不清楚),而且要是能把POS的狀況用更人性化的畫面顯示出來那是沒話說了.

另外一個考量就是,即使做了工具,要安裝啦COPY啦也是麻煩,而且有的環境辦不到(喂,就是你,上班時間還來看遊戲的BLOG真是...不要偷裝軟體被公司修理啊!)

能同時滿足上面的需求的,自然就是最近流行的線上工具(Web Application)了!
(老實說,vivio每天在做的也都是雲端的東西,也不太想做些要在本地執行的工具)

為什麼選擇Google App Engine?

在選擇這個工具的開發平台上,有幾個基本的考量...

  1. Free.除非能用ISK付費
  2. 能用Java.(會的人多,工具也多,我用的熟^o^)
  3. 配置,系統管理等不會太麻煩

由於Google App Engine(以下簡稱GAE)不只能滿足上述需求,更妙的是他內含了透過Google帳號來作用戶認證的機能,這代表使用這個工具的人不需要再去做一個新的帳號來登入(由於LIB在管理上都用Google的服務,所以成員都有Google帳號).

那....你到底正在做什麼?

這是個比較麻煩的問題.
上面的文章看了也知道,這工具一定要用有POS管理權限的API才能使用,所以自然不能給公司外的人看...
已完成的部分是POS的燃料顯示機能,把部份數據給打上馬賽克的圖片如下.

目前整個計畫算是剛完成評價階段,所以畫面也蠻簡陋的.
目前已確定能夠再GAE上架構個有用的工具(雖然還有些問題,後述)
POS燃料的殘量顯示接近完成,其他的機能也會稍後慢慢的推出(看vivio上班有多少時間摸魚?)
目前打算提供以下機能

  • POS的名稱,燃料消耗等的自訂機能(現在是以塔的消費量在算,沒考慮PG跟CPU....因為API取不到)
  • 用戶的管理介面,提供CEO登錄員工的Google帳號以及各員工的自訂機能
  • POS燃料的警告MAIL.....燃料快沒的時候會發到你的GMAIL帳號,甚至每天發日報給你.
  • 顯示用戶指定的倉庫中,事先指定的數種物資.....以方便POS管理員可以隨時確認燃料殘量.
  • 後續打算提供員工自行登記想跟其他員工共享的BPO(比方說放在事先指定的箱子裡面其他人就能看到裡面的BPO之類的)
  • 提供遊客試用的機能,讓別的公司的玩家能試看看是怎麼樣的工具
以上的機能基本上是只要有時間就能做起來,不過目前有些在GAE平台上或是EVE的API的問題有待解決

  • GAE的限制,每次HTTP通訊(GAE<-->EVE API)的容量上限是1MB,超過就會丟個Exception給你吃. 而EVE API那邊只提供一次取得所有資料的API(所以要是公司東西太多就拿不到資料)
  • GAE目前並沒有提供資料的匯入/匯出功能,要用戶自己想辦法. 目前所有物件的名稱等都是vivio直接寫在source裡面的,所以像是星系名稱等API取不到,要到database dump裡面才找的到的資料都不是很好找
  • EVE API....這可能不算是問題就是, EVE API很多端口都有流量限制,有的更有數據的更新頻度的限制.....像倉庫的內容,雖然透過Full Api可以取得很多次,但是每次取得後23小時之內他給你的都是你之前取得的數據的cache,要等過了23小時才會給你最近的數據,所以等於一天只會更新一次


如果看到這篇的玩家對這工具有興趣,或是有想到什麼有趣的機能的話,可直接在這個Blog留言或是在遊戲中直接發mail給vivio

另外誠徵開發夥伴,目前系統後台是採用 Spring MVC,畫面是用JSP在架構.
要是對共同開發有興趣的話,一樣請洽vivio 別害羞喔!