我目前正在製作基於瓷磚的MMORPG,並且試圖找到一種存儲大型2D遊戲世界的好方法(至少1000平方的瓷磚,但希望更像一些一千平方)。這個想法是鼓勵人們在共享的地圖上創建他們自己的城市,用戶將能夠建造房屋和商店,從而可以編輯瓷磚並與某些鏈接表具有一對多的關係。我正在考慮將它們發送到64x64瓷磚塊的客戶端。在線多人遊戲中存儲基於大型瓷磚的地圖
我現在有它的PHP/MySQL的工作,我的表是這樣的:
CREATE TABLE `fbmmo`.`tiles` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`x` int(11) NOT NULL,
`y` int(11) NOT NULL,
`realm` varchar(45) NOT NULL,
`image_id` varchar(45) NOT NULL,
PRIMARY KEY (`id`),
KEY `Index_X` (`x`),
KEY `Index_Y` (`y`)
) ENGINE=InnoDB AUTO_INCREMENT=4327236 DEFAULT CHARSET=latin1;
和查詢大致是
select * from tiles where x<1000 and y<1000 and x>936 and y>936;
當我只有大約50萬條記錄只需要大約半秒鐘,但是當我達到大約400萬條記錄時,大約需要5秒鐘,我相信有一些方法可以改善這一點。
我可以通過緩存地圖請求來避開它,但我想知道是否有更好的配置數據庫的方法,以及是否有人有效存儲大型二維遊戲世界的技巧?
感謝您的時間
嘗試在('x','y')上添加索引。 – joschi 2010-09-20 05:36:18