【问题标题】:What is the best way to get output of script on another server?在另一台服务器上获取脚本输出的最佳方法是什么?
【发布时间】:2013-12-03 19:57:12
【问题描述】:

我在服务器上安装了 Nominatim(带有开放的街道地图)。

在另一台服务器上,我有一个包含多列的数据库,其中 3 列是纬度(纬度)、经度(经度)和地址。 lat 和 lon 列用坐标完成,对于第三列,我用 PHP 编写了一个脚本,它查询 Nominatim(在另一台服务器上)以获取坐标的地址并在运行时更新数据库。目前脚本使用 cUrl(创建像 .../reverse.php?lat=XX&lon=YY 这样的 url),获取输出(一个 xml)并更新数据库。

问题在于,对于 1000 个坐标,大约需要 16 秒。该脚本一直运行 8 个 cUrl 线程,直到完成所有提取。我发现 8 线程是最好的,因为服务器有一个 8 核 CPU。

我想知道是否有更好的解决方案可以更快地获取地址。我正在考虑通过 ssh 运行 exec,甚至将数据库导出到 nominatim 服务器并在那里运行 exec。

在开始写代码之前,我想得到一个意见,所以我不会写几百行代码来得到更糟糕的结果。

【问题讨论】:

  • 我无法想象您的地理编码查询受 CPU 限制。请考虑增加服务器的磁盘吞吐量。
  • 我正在寻求改进而不更改服务器组件。我可以做些什么更好的(而不是 exec 或 curl)来减少时间?今天早上我用 exec 实现了一个脚本,1000 个坐标大约需要 32 秒,这是我用 cURL 得到的两倍。
  • 如果不知道您当前的瓶颈是什么,就无法判断。
  • 线程应该不是问题。您可以下载尽可能多的带宽。问题更有可能是挂起的连接。 CURL 会将您的所有 URL 作为一个批次处理,并且在所有 URL 下载完成之前不会移动到下一个批次。要下载并行 URL,请查看 UB 存储库中的 puf 程序。其次,你不能做一些事情来在一个请求中进行多次查找吗?比如:/reverse.php?lat[]=XX&lon[]=YY&lat[]=XX&lon[]=YY&lat[]=XX&lon[]=YY

标签: php mysql curl exec nominatim


【解决方案1】:

通过在 Nominatim 服务器上移动脚本并使用 exec 运行 8 个脚本,每个脚本处理 1/8 的数据,我设法将时间缩短到 4 秒。

【讨论】:

    猜你喜欢
    • 2010-09-19
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多