PHP,MySQL,空间数据和设计。

5

我正在开发一个应用程序,用GPS记录车辆坐标。 我想从一些功能开始实现,例如:

  • 车辆的实时跟踪
  • 车辆历史轨迹记录
  • 为客户记录位置和区域

我需要一些指导,告诉我如何开始数据库和应用程序设计。 从最佳实践、提示到经验,任何信息都能帮助我走上正确的道路。

  • 对于几何对象,如何处理ORM?例如:位置将转换为SpatialPoint类,而区域将转换为SpatialPolygon类。
  • 如何保持来自车辆的大量数据流正常?我考虑使用一个表来保存最新的点(用于实时数据),并在单独的表中批量解析此数据以便存储历史轨迹(每个员工班次在车辆上形成一条线)。
  • MySQL可能不是这个项目的最佳选择,但我计划使用Solr作为基于位置的快速搜索索引。尽管我们需要进行一些实时距离计算,例如哪辆车距离客户X最近。有什么想法吗?
3个回答

4
我可以帮您解决一个问题,MySQL 绝对是最好的选择,我已经多次走过和你一样的路,MySQL 空间扩展非常棒,事实上,即使在拥有 500 万行以上空间数据的表中,它的性能也非常快,这都归功于索引。空间扩展是 MySQL 最为隐秘的功能之一,很少有人使用。
至于 ORM,我建议您跳过这个,因为如果您有大量数据,所有这些类的实例将会拖慢您的应用程序,所以最好使用一个非常简单的数组结构来处理数据。
对于海量数据流,您可以选择实时消费并仅存储每 10 个条目,或者将其全部放入一个表中 - 这不会影响速度,因为表的索引方式,但需要考虑大小方面的问题。
如果您从 PHP 转换到其他数据库,可以尝试 PostgreSQL 上的 PostGIS,但我始终认为 MySQL 更易于使用、本地支持和全面快速。
祝好运!

实际上,我已经开始实现ORM了。根据列类型,它会构建一个对象(SpatialPoint、SpatialPolygon)。这些类有方法可以给我正确的DB语句。我不知道速度如何,但在大多数情况下,应用程序不会生成超过几百个对象。感谢您对MySQL的信任,我真的没有时间切换到postgreSQL。 - Dylan

3

是的,我也推荐使用Solr。当前版本是1.4。它对于这个问题非常有效。

  1. ORM - 您可能需要使用Doctrine ORM的sfSolrPlugin将PHP与Solr绑定,可以参考LucidWorks的文章在15人日内构建搜索应用程序

  2. 实时索引更新 - 这将在下一个Solr版本中实现,我认为是Solr 1.5。您可以从SVN获取它。

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


如何处理/存储大量来自车辆的点的建议? - Dylan
但对于存储大量数据点来说,即使是MySQL也可以。如果您的数据变得太大,您始终可以考虑使用NoSQL数据库,如Cassandra、PNuts或HBase。 - Joyce

0
关于“如何处理/存储来自车辆的大量点”的问题:
我正在处理一个非常类似的项目。我通过维护两个表(使用MySQL,但对于任何其他数据库都适用)来解决了这个问题:
1. 用于跟踪对象(车辆、用户等)的表 该表将对象ID作为主键,并且违反主键约束的任何更新都会更新存储在此键下的数据。可以很容易地通过“ON DUPLICATE KEY UPDATE”实现。这使得跟踪变得非常快速,并且仅保留一个位置数据/对象实例。我还实现了服务器端逻辑,以删除过时数据的记录(如果它们没有收到更新,则需要在一定时间后删除这些数据)。
2. 用于历史记录/查找目的的表 该表将对象ID和时间戳作为组合主键。该表可以根据时间戳列进行分区。
任何对象位置的更新都会插入到这两个表中。
希望这能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接