Python 解决以下问题的优化方法

Python 解决以下问题的优化方法,python,sql,django,optimization,Python,Sql,Django,Optimization,假设我有一个地图坐标x和y的数据库表。我获取我想要显示的内容,并使用PIL创建地图图像 我创建了一个图像,通过每个贴图块循环粘贴背景图像,一切都很好 现在,瓷砖上可以有n个玩家,一个怪物,一个npc,一个门户或者其他任何东西。 如果瓷砖上有任何对象,我需要粘贴特定的图像 问题:如何检查瓷砖上是否有东西?数据库结构应该是什么? 每个玩家都有位置(FK到其位置的贴图)。如果我查询DB以找出平铺上有玩家/怪物/npc的位置,这将是一件痛苦的事情,因此我在每个坐标中添加了一列objects\u coun

假设我有一个地图坐标x和y的数据库表。我获取我想要显示的内容,并使用PIL创建地图图像

我创建了一个图像,通过每个贴图块循环粘贴背景图像,一切都很好

现在,瓷砖上可以有n个玩家,一个怪物,一个npc,一个门户或者其他任何东西。 如果瓷砖上有任何对象,我需要粘贴特定的图像

问题:如何检查瓷砖上是否有东西?数据库结构应该是什么?

每个玩家都有位置(FK到其位置的贴图)。如果我查询DB以找出平铺上有玩家/怪物/npc的位置,这将是一件痛苦的事情,因此我在每个坐标中添加了一列objects\u count。如果大于0,则我查找事件

然后它看起来像:

if objects_count:
    if query_for_players_exists:
        show player
    elif query_for_monster_exists:
        show monster
    elif query_for_npc...
        show npc
    and so on.
我可以使用M2M来创建具有泛型关系的表,但IMHO泛型关系并没有那么快。
请记住,queryset由49个互动程序组成。我如何轻松找到互动程序上存在的对象?

首先想到的是以下内容。如果对象的密度不是很高(例如,小于15%,例如,这是可计算的),则可能有包含以下字段的表格:
x,y,objects
。其中,
对象
可能是pickle数组或列表的其他文本表示形式。瓷砖名称的列表

但是,如果贴图足够密集,则最好将其分割为方形的不重叠块,并将其保存为对象的矩阵(矩阵的大小是恒定的,取决于视口大小)。当然,对象本身也必须序列化为矩阵单元


但有一点是有道理的,即对象的“普通”表示无法获得太多性能。您需要以某种方式对它们进行打包,以减少行级操作。

为什么要对每个磁贴或每个磁贴+可能的对象运行查询?运行1个查询以返回所有分幅的所有对象,并按分幅遍历结果集

即使每个平铺有100个对象,49个平铺,结果集中也只有4900个项目

fetch database rows and store resultset in some data structure foreach tile if( have tile in DB resultset) place all object from tile 获取数据库行并将结果集存储在某些数据结构中 foreach瓷砖 如果(在DB resultset中具有磁贴)
从tileIt放置所有对象是一个查询。问题是如何获取位于这些瓷砖中的对象。啊。我错误地解释了伪代码,这意味着您正在运行多个DB查询。