8

我正在设计一个需要在数据库中保存几何形状的应用程序。我还没有选择数据库管理系统。

在我的应用程序中,所有数据库查询都将有一个边界框作为输入,作为输出,我想要该数据库中的所有形状。我知道具有空间索引的数据库用于此类应用程序。但在我的应用程序中,不会有任何类型的查询“给我 x/y 附近的对象”或其他在 GIS 应用程序中有用的更复杂的查询。

我计划拥有一个没有空间索引的数据库,并且查询看起来像:

SELECT * FROM shapes WHERE x < max_x AND x > min_x AND y < max_y AND y > min_y

并在x (double)y (double). 据我所知,我真的不需要具有空间索引的数据库,但是我的应用程序与那种应用程序很接近。

即使我想要附近的查询,我也可以在该点周围创建一个足够大的边界框。或者这会导致性能不佳?

我真的需要空间数据库吗?什么时候需要空间索引?

编辑: 搜索查询实际上比我上面写的要高级一点,因为我处理几何形状,我将输入一个边界框,它将返回多个形状(带边界框),这些形状在里面或干扰框在查询中。但是在阅读了所有好的答案之后,我仍然认为我可以在没有空间索引的情况下做到这一点。

4

4 回答 4

2

不,您不需要空间索引。

需要空间索引来计算对象之间的距离,查看一个点是否在另一个点的某个半径范围内,等等......主要是当您需要考虑地理坐标时。南半球,北半球等......当你必须考虑地球的曲线时,这一切都会改变距离。

如果您一直在寻找 x 和 y ,那么您将受益于同时在这两个项目上建立索引。所以...不是 x 列上的索引和 y 列上的索引,而是 x 列和 y 列上的索引组合。

于 2010-03-31T22:38:11.033 回答
2

我真的需要空间数据库吗?

看起来你正在做的事情对你的应用程序很好。

即使我想要附近的查询,我也可以在该点周围创建一个足够大的边界框。

您可能需要考虑在Geohash上创建索引。建议将此方法用于索引 Google App Engine 上的地理空间点,例如索引功能有限的地方。(来源

什么时候需要空间索引?

空间索引在许多情况下很有用。首先,空间索引不仅可以处理点,还可以处理折线、多边形和其他形状。此外,正如您已经提到的,有许多复杂的查询操作可以应用于空间数据,其中适当的空间索引是必不可少的。

于 2010-03-31T22:45:43.263 回答
2

为了增加现有的优秀答案,性能在这里可能不重要,也可能不重要。

如果您通过对 x 和 y 轴执行两个范围查询并获取结果的交集来模拟空间索引范围查询,那么您将执行两个查询,这可能会返回比交集之前需要的数据多得多的数据。

另一方面,这样的查询是由空间索引原生支持的,因此将得到有效的回答。

总而言之,如果您的空间查询是瓶颈,您将需要使用空间索引。

于 2010-04-07T07:56:20.770 回答
1

如果您不超越您已经在做的事情,那么您就不需要空间索引或 GIS。但是,我会仔细考虑您的要求是什么以及应用程序增长到需要 GIS 系统的可能性。对于这种过渡,它比计划更早或更晚。

GIS 为您提供了几个优势。首先,GIS 具有特殊的形状列,用于存储几何所需的所有内容。它管理空间参考、坐标元数据等。GIS 为基于空间关系查询数据和修改几何(联合、提取、缓冲区等)提供了强大的方法。它处理点、线、多边形等。您可以从拓扑操作中导出新的形状。此外,几乎所有 GIS 系统都提供了渲染数据的方法(这实际上取决于您选择的 GIS,但是当它出现时,它可以为您节省大量工作)。

如果您拥有真正的 GIS 环境,则只需要空间索引。如果您确实选择了 GIS 环境,是的,请使用空间索引——您真的不想在没有它们的情况下工作。

于 2010-03-31T22:42:37.873 回答