这个问题出现在以下考虑之后:考虑像Travian或Tiberium战争这样的MMOG的巨大世界地图。即使它们是2D地图,它们通常也有许多不同的身份,如玩家的城镇,地形特征等。
这些地图如何保存在数据库中?是否每个磁贴都有一个条目,并且该标识位于该位置的外键?或者反过来说:每个身份是两个位置属性(x,y),它们定义了它的位置?
从更广泛的意义上讲,我的问题如下:在类似mysql的数据库上存储位置点阵(方形图块,六边形图块等)的最有效方法是什么?在查询数据库中的位置或位置列表时,制作此类存储的瓶颈(如果有的话)是什么?
答案 0 :(得分:0)
这完全取决于场景。例如,如果地图是稀疏的,则将具有坐标的实体的位置存储在单行中可能是有意义的。如果拓扑是不规则的(即,任何给定的tile中有任意多个路径),那么您可以将其存储为图形(即,在一对多配置中单独的“节点”和“边缘”表) 。您可能决定对数据库中的项使用连续(例如,实际)坐标,然后将它们简单地划分为应用程序中的逻辑“切片”。
同样,瓶颈将取决于应用程序。你经常需要问“我周围有什么?”,或者你只是问“我可以从这里到那里吗?”。如果您考虑到特定的用例,也许您可以添加更多细节,我们可以尝试提供更详细的答案。
与任何谈论绩效的事情一样,假设案例中的随机猜测永远不能替代原型设计和衡量。