我目前正在制作一个基于瓷砖的大型多人在线角色扮演游戏,并试图找到一种良好的方法来存储一个大型的2D游戏世界(至少1000个平方瓷砖,但希望更像几千个平方瓷砖)。这个想法是鼓励人们在共享地图上建立自己的城市,用户将能够在游戏中建造房屋和商店,因此这些瓷砖可以被编辑,并且与一些链接表具有一对多的关系。我考虑将它们分成64x64个瓷砖块并发送给客户端。
我目前已经在php/mysql中实现了它,我的表格如下:
我目前已经在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秒钟,我相信有一些方法可以改善这种情况。
我可以通过缓存地图请求来解决这个问题,但我想知道是否有更好的配置数据库的方法,以及是否有关于有效存储大型2D游戏世界的技巧?
感谢您的时间。
x
,y
)上添加索引。 - joschi