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哪天能大發善心來提供一下日文或是中文版啊.....反正多國語的架構一弄好,多一國也不需要多少資源.

2 則留言:

匿名 提到...

做的好啊,加油加油。

匿名 提到...

是簡中也沒屁用030