繁体   English   中英

MySQL Postgresql / PostGIS

[英]MySQL Postgresql / PostGIS

我有4亿行分区的mysql表中的lat / lon坐标。 该表每分钟增长2000条记录,旧数据每隔几周刷新一次。 我正在探索如何对这些数据进行空间分析。

大多数分析需要查找某个点是否在特定的纬度/经度多边形中,或者哪个多边形包含该点。

我看到了以下解决多边形点(PIP)问题的方法:

  1. 创建一个mysql函数,它接受一个点和一个Geometry并返回一个布尔值。 简单但不确定如何使用几何来执行lat / lon坐标上的操作,因为Geometry假设平面而不是球体。

  2. 创建一个mysql函数,它接受自定义数据结构的一个点和标识符并返回一个布尔值。 多边形顶点可以存储在表格中,函数可以使用球形数学计算PIP。 大量的多边形点可能会导致庞大的表和慢查询。

  3. 将点数据保留在mysql中并在PostGIS中存储多边形数据,并使用app服务器通过将点作为参数在PostGIS中运行PIP查询。

  4. 将应用程序从MySQL移植到Postgresql / PostGIS。 这将需要花费大量精力来重写查询和过程。 我仍然可以做到这一点,但Postgresql处理4亿行有多好。 在Google上快速搜索“mysql 10十亿行”会返回许多结果。 Postgres的相同查询不返回相关结果。

想听听一些想法和建议。

一些想法。

首先,PostgreSQL和MySQL在性能调优方面完全不同。 因此,如果你去移植路线准备重新考虑你的索引策略。 PostgreSQL不仅具有比MySQL更灵活的索引,而且表格方法也非常不同,这意味着适当的索引策略与策略不同。 不幸的是,这意味着你可能会有点挣扎。 如果我可以给出建议,我会建议首先丢弃所有非关键索引,然后根据需要谨慎地添加它们。

第二点是,此时没有人可能会给你大量的实用建议,因为我们不知道你的程序的内部。 在PostgreSQL中,你最好只索引你需要的东西,但你可以索引函数的输出(这在这种情况下非常有用 ),你只能索引表的一部分。

我更像是一个PostgreSQL人而不是MySQL人,所以我认为你应该选择PostgreSQL。 然而,不是告诉你为什么等等,并且让你在这个规模上挣扎,我会告诉你一些我想看的东西,如果我试图这样做的话。

  • 功能指标
  • 为相关分析编写索引的自己的函数
  • PostGIS非常棒,非常灵活

最后,在这个卷上切换db将是一个学习曲线,你需要做好准备。 但是,PostgreSQL可以很好地处理音量。

行数在这里是无关紧要的。 问题是索引可以完成多边形工作的重点。

答案取决于多边形的大小。

PostGIS可以非常快速地找到多边形边界框中的所有点。 然后,需要花费更多精力来确定该点是否实际位于多边形内。

如果您的多边形很小(小边界框),查询将是有效的。 如果您的多边形很大或者形状使得边界框大,那么它的效率就会降低。

如果您的多边形或多或少是静态的,那么就有解决方法。 您可以将多边形划分为较小的多边形并重新创建idnex。 那么索引会更有效率。

如果您的多边形实际上是多边形,则第一步是使用ST_Dump将多边形分割为多边形,然后重新创建并在结果上构建索引。

HTH

尼克拉斯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM