【问题标题】:PHP, MySQL, spatial data and designPHP、MySQL、空间数据和设计
【发布时间】:2011-03-10 13:21:02
【问题描述】:

我正在构建一个通过 GPS 记录车辆坐标的应用程序。我想先实现几个功能,例如:

  • 车辆实时跟踪
  • 车辆历史跟踪
  • 为客户记录保存位置和区域

我需要一些指导方针,作为数据库和应用程序设计的起点。任何从最佳实践到经验的提示都会真正帮助我走上正轨。

  • 如何处理几何的 ORM?例如:位置将转换为 SpatialPoint 类,其中区域将转换为 SpatialPolygon 类
  • 如何让来自车辆的海量数据流保持正常?我正在考虑一个表格来保存最新的点(用于实时数据),并将这些数据批量解析到一个单独的表格中的折线中以用于历史记录(车辆上每个员工轮班一条线)。
  • Mysql 可能不是最好的选择,但我计划使用 Solr 作为基于位置的快速搜索的索引。虽然我们需要做一些实时距离计算,比如哪辆车离客户 X 最近。有什么想法吗?

【问题讨论】:

    标签: php mysql database-design solr spatial


    【解决方案1】:

    关于“如何处理/存储来自车辆的大量积分”:

    我正在做一个非常相似的项目。我通过维护 2 个表解决了这个问题(使用 MySQL,但这适用于任何其他数据库):

    • 用于跟踪对象(车辆、用户等)

      此表将以对象 id 作为主键,任何违反主键约束的更新都会更新为此键存储的数据。可以通过“ON DUPLICATE KEY UPDATE”轻松实现 这使得查找跟踪的速度非常快,并且只保留一个位置数据/对象的实例。我还实现了用于删除过时数据记录的服务器端逻辑(在一定时间后,如果没有收到更新,则需要删除这些数据)

    • 一个用于历史/查找目的

      此表将对象 id 和时间戳作为复合主键。该表可以在时间戳列上进行分区。

    对对象位置的任何更新都会插入到两个表中。

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      是的,我也推荐使用 Solr。当前版本是 1.4。它非常适合这个问题。

      1. ORM - 您可能需要 sfSolrPlugin 和 Doctrine ORM 来将 PHP 与 Solr 绑定,请参阅 LucidWorks 的文章,标题为 Building a search application in 15 person-days

      2. 实时索引更新 - 这将出现在 Solr 的下一个版本中,我相信 Solr 1.5。您可以从 SVN 获取。

      3. 地理空间搜索 - 我使用Spatial Search Plugin for Apache Solr。 G-s 功能可能包含在 Solr 1.5 中。我相信已经有一些对 g-s 的基本支持,不使用插件。

      【讨论】:

      • 关于如何处理/存储大量来自车辆的积分有什么建议吗?
      • 但是对于存储大量数据点的工厂运行,即使是 mysql 也可以。如果您的数据变得太大,您始终可以考虑使用 NoSQL 数据库,例如 Cassandra、PNuts 或 HBase
      【解决方案3】:

      我可以帮助你一点,mysql 绝对 是最好的选择,我已经和你走同样的路很多次了,mysql 空间扩展很棒,事实上它甚至非常快超过 500 万行空间数据的表,都在索引中。空间扩展是保存最完好的 mysql 秘密之一,很少有人使用;)

      ORM,我建议跳过这个 tbh - 如果您有大量数据,所有这些类的实例都会杀死您的应用程序,请坚持使用简单的数组结构来处理数据。

      RE 大量数据流,要么实时使用它并仅存储每 10 个条目,要么将其全部保存在一个表中 - 由于表的索引方式,它不会影响速度,但大小考虑可能值得考虑.

      对于来自 PHP 的替代方案,您可以在 postgresql 上尝试 postgis,但我一直偏爱 mysql,因为它易于使用、原生支持和全面的速度。

      祝你好运!

      【讨论】:

      • 实际上我继续实施了一点 ORM。根据列类型,它构建一个对象(SpatialPoint、SpatialPolygon)。这些类也有方法给我正确的数据库语句。我不知道速度,但在大多数情况下,该应用程序无论如何都不会产生超过几百个对象。感谢您对 MySQL 投的信任票,我实在没时间改用 postgreSQL。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      • 2013-04-15
      • 2016-10-10
      • 2012-01-11
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多