【发布时间】:2012-03-14 04:12:18
【问题描述】:
我在 4 亿行分区的 mysql 表中有纬度/经度坐标。 该表每分钟增长 2000 条记录,并且每隔几周刷新一次旧数据。 我正在探索对这些数据进行空间分析的方法。
大多数分析都需要确定一个点是否在特定的纬度/经度多边形中,或者哪些多边形包含该点。
我看到以下解决多边形点 (PIP) 问题的方法:
创建一个 mysql 函数,该函数接受一个点和一个几何图形并返回一个布尔值。 简单但不确定如何使用几何来对纬度/经度坐标执行操作,因为几何假定平面而不是球体。
创建一个 mysql 函数,该函数接受一个点和自定义数据结构的标识符并返回一个布尔值。 多边形顶点可以存储在表格中,并且函数可以使用球面数学计算 PIP。大量多边形点可能会导致表格庞大和查询缓慢。
将点数据留在 mysql 中,将多边形数据存储在 PostGIS 中,并使用应用服务器通过提供点作为参数在 PostGIS 中运行 PIP 查询。
将应用程序从 MySQL 移植到 Postgresql/PostGIS。 这将需要在重写查询和过程方面付出很多努力。 我仍然可以做到,但 Postgresql 在处理 4 亿行时有多好。 在 google 上快速搜索“mysql 10 亿行”会返回许多结果。 Postgres 的相同查询不返回相关结果。
想听听一些想法和建议。
【问题讨论】:
-
我有使用 300M+ 行表运行 Postgres 的个人经验——毫不费力。 Skype 使用 Pg 来跟踪连接、用户、会计等。除了通信渠道本身之外的一切。那是数十亿条记录。
-
那么达到 300M 有多容易/多难?它需要多少调整/优化?我读过有关使用 Postgres 的 Skype 的文章,但大公司可以投入资源并让任何事情发挥作用。我正在寻找的是像你这样的输入。
-
我们的 PostgreSQL 数据库每秒处理多达约 5000 个事务,过去 2 年每月处理约 6 亿条记录。以前的 MySQL 服务器无法在相同的硬件上处理此问题。
-
@Priyank 不需要太多调整。通过默认的分发构建,Pg 能够使用大内存、磁盘和处理器资源来处理具有高并发性的大型数据集。有一些默认配置设置适用于较小的系统(例如 shared_buffers),但您只需更改少量配置值即可从适合您工作负载的大型机器中获得良好的性能。您将希望对其他数据库执行相同的操作来管理大数据:分区策略、备份和复制、确保您的存储系统能够满足要求等。
-
我已经设法获得了一个包含超过 27 亿条记录的 postgres 数据库,我可以通过查询告诉我使用 ST_Contains 在某个多边形内有多少记录。 .并且根据我的经验,Postgres 的规模比 Mysql 好得多...从这个角度来看,我建议使用选项 4。只是想问......这种地理空间需求是否纯粹是一种报告需求?是否可以让 MYSQL 继续使用该应用程序并创建一个每晚从 MYSQL 数据库加载的 Postgres 数据仓库?为您提供一个独立于您的产品环境的报告世界。
标签: mysql postgresql gis geospatial postgis