【问题标题】:Performance issue - getting data from Navision to PHP API性能问题 - 从 Navision 获取数据到 PHP API
【发布时间】:2015-10-14 19:08:54
【问题描述】:

我目前正在创建一个可以访问我们的 Navision 系统的 API。我对此很陌生,但我只向现有系统添加了一些功能。问题是:

更新 2:

我认为 Navision 的版本无关紧要,因为我正在查询直接附加的 MSSQL 数据库。也许 MSSQL DB 的版本可能是相关的:

Microsoft SQL Server 2012 - 11.0.2218.0 (X64) 2012 年 6 月 12 日 13:05:25 版权所有 (c) 微软公司 Windows NT 6.1(Build 7601:Service Pack 1)(管理程序)上的标准版(64 位)

更新:

我已经遍历了 CSV 文件,并且每次收到新电子邮件时都会执行搜索查询,因为它无法使用包含 70.000 封电子邮件的 IN() 语句调用 MSSQL 服务器。

我也只打开 csv 文件写入一次,而不是每次请求。

已完成:

  • 我有一个包含大量电子邮件的 csv 文件(完成)
  • 应该上传(完成)
  • 然后应该将上传的文件解析为电子邮件(完成)
  • 然后应将电子邮件与 Navision 中的电子邮件进行匹配(完成)

问题:

  • 这需要很长时间
  • Navision 速度变慢,每天都有很多人依赖该系统。

信息:

  • 大约有。 CSV 文件中有 70.000 封电子邮件(并且还在增加)
  • 我们有大约。 Navision 拥有 100 万客户
  • 这个脚本应该每天运行一次。
  • SQL 语句中目前没有连接(这个会出现)

你们对如何优化流程有什么建议吗?

任何帮助将不胜感激。

// 乌尔里克·麦卡德尔

【问题讨论】:

标签: php sql api csv navision


【解决方案1】:

如果不了解您如何实施流程的细节,就不可能谈论细节。但是,这里有几个常见的陷阱要避免:

1) 编写脚本来解析大文本 CSV 文本文件时,请逐行执行。不要尝试将文件加载到内存中 - 加载到庞大的数组或类似的数组中。这是非常低效的。相反,打开文件并使用诸如 while 循环和 fgetcsv() 之类的东西逐行迭代,处理该行,将其丢弃并加载另一行。

2) 让 RDBMS - MySQL、Oracle、Postgres 等等 - 处理繁重的工作。 PHP 不是处理数据的地方。换句话说,优化 SQL 语句。我认为“Navision 变慢”位最好注意 SQL。

【讨论】:

  • 我实际上是从一次做所有事情开始的,就像你提到的我的陷阱 1)。但我很快将其更改为单行。我也每次打开和关闭文件,我再次将其更改为只打开一次。这一切都有帮助。
  • 每次都打开和关闭文件?每次读一行?
  • 是的,我正在这样做,但现在不再这样做了。我有一个包含电子邮件的文件,对于每封电子邮件,我都会连接到 MSSQL DB 并使用该电子邮件从客户那里检索数据。在我打开和关闭每个电子邮件循环的输出 csv 文件之前。但我改变了这一点。
猜你喜欢
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 2021-08-19
相关资源
最近更新 更多