[心得] 超大型地圖的設計與原型樣品
在前幾篇文章中我有提到網頁戰略遊戲的地圖設計
我想許多大型遊戲一定也都用到了類似的方法去規劃地圖在資料庫上儲存的方式
程式碼的部分我就不講解了
扣掉註解
實際有功能的程式碼為185行(沒併行)
想分享的原因其實蠻簡單的
只是想知道有哪些人也這麼做過
概念圖像下面那樣
把地圖依個人需求切割成好幾的地區存放
(?為你所設定的地圖區塊大小)
(1,1)┌─┬─┬...─┐(x_end,1)
│ │ │ │
(1,1*?)├─┼─┼...─┤(x_end,1*?)
│ │ │ │
(1,2*?)├─┼─┼...─┤(x_end,2*?)
│ │ │ │
. . . .
. . . .
. . . .
(1,y_end)└─┴─┴...─┘(x_end,y_end)
概念:
因考慮到資料庫單一資料表的效能問題
所以地圖的資料寫入動態生成的資料表中
圖中的交會處
也就是每個資料表的交會處(邊緣)
我稱為節點
讀取時利用節點的計算來取得需要讀取的資料表
最後將資料取出排列就大公告成了
我有做地圖編輯器
所以可以動態生成存放地圖資料的資料表
這個1600萬格的地圖要花80分鐘才能跑完(InnoDB)......
主要是寫入資料在花時間
整個陣列的產生其實只需要42秒
這是臨時的ip
http://XXX.XXX.XXX.XXX/ (先拿掉)
會放個一天讓有興趣的人交流
不過全部的人共用一組資料
所以若同時很多人在操作的話
地圖的座標會跳很快或者亂跳
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.227.166.149
推
08/11 10:15, , 1F
08/11 10:15, 1F
→
08/11 10:25, , 2F
08/11 10:25, 2F
→
08/11 10:29, , 3F
08/11 10:29, 3F
→
08/11 10:40, , 4F
08/11 10:40, 4F
→
08/11 10:40, , 5F
08/11 10:40, 5F
※ 編輯: cowbaying 來自: 61.227.166.149 (08/11 10:49)
→
08/11 11:00, , 6F
08/11 11:00, 6F
※ 編輯: cowbaying 來自: 61.227.166.149 (08/11 16:50)
→
08/11 17:46, , 7F
08/11 17:46, 7F
→
08/11 17:46, , 8F
08/11 17:46, 8F
→
08/11 19:15, , 9F
08/11 19:15, 9F
→
08/11 19:15, , 10F
08/11 19:15, 10F
推
08/11 19:30, , 11F
08/11 19:30, 11F
→
08/11 21:12, , 12F
08/11 21:12, 12F
→
08/11 21:43, , 13F
08/11 21:43, 13F
推
08/11 22:58, , 14F
08/11 22:58, 14F
→
08/11 22:58, , 15F
08/11 22:58, 15F
→
08/11 23:16, , 16F
08/11 23:16, 16F
→
08/11 23:20, , 17F
08/11 23:20, 17F
→
08/11 23:21, , 18F
08/11 23:21, 18F
7200轉的硬碟 平均搜尋時間大多落在12ms
再加上其他機械動作
讀寫一回大多是32ms 附近
我會把資料表做成動態生成還有一個因素
就是可以避免大量的資料寫入時資料表被鎖死的問題(同一個資料表)
雖然可以延遲寫入
但寫入的瞬間還是會卡死
不過這個問題還是要等實際跑過後再來做改善了
※ 編輯: cowbaying 來自: 59.127.242.3 (08/11 23:38)
推
08/12 00:09, , 19F
08/12 00:09, 19F
→
08/12 00:09, , 20F
08/12 00:09, 20F
→
08/12 00:25, , 21F
08/12 00:25, 21F
→
08/12 00:27, , 22F
08/12 00:27, 22F
→
08/12 00:27, , 23F
08/12 00:27, 23F