【问题标题】:One huge XML file with long SQL statement or not?一个带有长 SQL 语句的巨大 XML 文件?
【发布时间】:2012-05-10 12:50:44
【问题描述】:

我有一个包含大约 10 个表的数据库,它们都以某种方式相互连接(外键、关联表)。

我想使用所有这些数据将其绘制在我的 Google 地图实例上,作为带有信息框的标记,并能够过滤地图。

Google Maps Articles 来看,您必须使用 XML 和数据库中的数据来绘制标记和其他所有内容。

但是生成该 XML 文件的正确方法是什么?在加载网页和地图时,有一个巨大的 SQL 语句来生成一个包含所有表的全部数据的 XML 文件,还是有更正确的方法?

【问题讨论】:

    标签: php mysql google-maps google-maps-api-3


    【解决方案1】:

    如果您想使用 XML,因为 PHP 和 AJAX 使之相对容易,那就去做吧。这就是示例使用它的原因。但是您肯定不限于 XML。 JSON 是常用的,因为它也很容易使用 PHP,下载量比 XML 小,并且以 Javascript 可直接使用的形式交付。或者你可以使用任何其他可以被你的页面的 Javascript 操作的东西。

    关于是否使用一个庞大的查询和数据下载,您也不必这样做。你可以这样做:它可能很慢——不仅要进行查询,还要传输数据,缓存查询结果无济于事。您的用户必须等待数据到达,然后由您的 Javascript 操作才能显示在地图上。

    您可能会考虑执行一个相当简单的查询来显示基本数据,以便用户可以相当快速地看到一些内容,然后再进行更多查询,也许是需要数据。如果用户不打算单击并查看它,那么下载大量 InfoWindow 数据是没有意义的。在这种情况下,传递标记数据和基本 InfoWindow 数据,并且仅在用户实际请求时才获取详细数据(即使用两阶段 InfoWindow)。

    【讨论】:

      【解决方案2】:

      您绝对不必使用 XML 在 Google 地图实例上放置标记。您可以,但如果看起来很困难,您不必这样做。我经常使用 Google Maps V3 API,我建议您将数据导出为 JSON 并使用 PHP 将其嵌入到您的文档中,或者使用 Ajax 使其可供 JavaScript 加载。

      从数据中创建交互式标记非常简单。您只需要遍历您的数据,为您想要在地图上的每个点创建一个 Marker 对象,提供一些您希望在信息窗口中显示的 HTML,并在 Marker 的点击事件中显示该信息窗口。

      我将向您推荐Google Maps API v3 beginner tutorial,而不是像茶匙那样精确地指导您,其中包括有关如何创建标记并将其显示在地图上的示例。

      有趣的是,您可以控制为每个标记显示哪个图标(您可以为所需的任何图像提供 URL),以及使它们反弹。总而言之,使用 JavaScript 比使用 XML 拥有更多的控制权。

      关于性能,我会听取 cillosis 的建议,并以您最终选择的任何格式缓存您的 MySQL 数据。如果你要使用 JSON,你也可以缓存它的结果。您可以简单地将输出保存在名为“mysql-export-1335797013.json”之类的文件中。该数字是一个 Unix 时间戳,您可以使用它推断何时需要刷新数据。

      【讨论】:

      • 我不能用一条长长的 SQL 语句生成一个巨大的 XML 文件,然后将其存储在服务器上,并使用它来过滤地图上的标记,例如 XPath 和 php 吗?跨度>
      • 我避免在 Google 地图中使用 XML。使用 JavaScript,您可以在一个整洁的数组中使用所有可用的标记。每当您更改过滤器时,您只需要遍历数组并确定哪些标记不应该可见并在它们上运行marker.setVisible(false)。这是假设您只是在第一个请求中从服务器加载所有数据。这是我通常做的事情,它在性能方面表现良好,最多可达 10 000 个标记
      • 你可以用Javascript做什么与数据是否以XML,JSON或任何其他格式从服务器到客户端无关。
      • 当然可以,但是如果您要使用 JavaScript 创建交互式地图,为什么要使用 JSON 以外的其他方式传输数据?特别是 XML?此外,我很确定 OP 是在谈论 Google 的 KML 格式,您可以直接将其插入 Google 地图。你可以用它做很多很酷的事情,但我仍然认为你不能达到与使用 JavaScript 手动创建所有标记时相同的控制水平。
      【解决方案3】:

      第一次使用 SQL 为特定查询生成 XML,然后缓存该 XML 输出以供以后使用。第一次它可能很慢,但之后它已经生成并且会非常快。

      【讨论】:

      • 所以对于每个新的过滤器查询运行一个执行 sql 语句,生成 xml 并将其保存到服务器,然后如果其他人要求相同的过滤器查询,只需为他们提供缓存版本?
      • 没错。我对我拥有的潮汐应用程序做了类似的事情。数据每 24 小时更改一次,因此我将其缓存很长时间,以防有人再次请求潮汐位置,它会更快。当然,您的数据的有效期取决于您和您的应用程序。
      • 你有链接到以这种方式使用缓存的示例吗?
      猜你喜欢
      • 2015-04-27
      • 2010-09-07
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      相关资源
      最近更新 更多