【问题标题】:increase exectution speed php scripts on localhost of xampp提高 xampp 本地主机上的执行速度 php 脚本
【发布时间】:2012-06-03 07:23:38
【问题描述】:

我必须从大量文本文件中提取单词并检查它们是否存在于 phpmyadmin 的这个大型 wordnet 数据库中。由于循环和检查(mysql),执行需要 3 到 4 分钟。

有什么方法可以优化吗?增加 db 缓冲区大小会有所帮助吗?如果是,那该怎么做?

【问题讨论】:

  • 您是否对每个单词执行一个 mySQL 查询? mySQL wordnet 数据库有多大?
  • 是的,整个数据库是 40 mb,我使用的表是 4 和 11mb。如果我为我只使用的表创建一个单独的数据库,你认为我会有所作为吗??..i将文本中的所有单词提取到一个数组中,我检查它们是否存在于 wordnet 单词表中,如果它们得到它们的 wordid 并从中得到单词定义,还有其他更好的方法吗?跨度>

标签: php mysql performance xampp localhost


【解决方案1】:

只需将单词作为哈希图一次全部加载到 php 内存中。喜欢

$words = array(
    'foo' => 1, 'bar' => 1, 'baz' => 1
);

//then check like
$exists = isset($words[ $word ]);

【讨论】:

  • 感谢您的帮助,但我认为是 sql 查询减慢了进程,因为最初我使用基本数组读取整个文件并立即显示它们的单词,但这个过程并没有采取那个很多时间。只是现在当我检查数据库中是否存在单词时,执行时间超过了限制
  • 是的。这就是为什么我的建议消除了数据库。你一定误会了。通过一次查询从数据库中获取单词,将它们放入数组中,然后读取文件并检查是否存在。
  • 有 147,305 条记录,如果我得到所有这些记录会不会很慢?
  • 谢谢!!你是对的,我的执行时间减少了一半,虽然它并不需要 2 分钟,但我不得不稍微改变我的代码结构
【解决方案2】:

您可以将内存中所有单词的索引缓存在树结构中,并存储指向记录的指针,其中包含单词所在位置的偏移量。您可以使用 Binary Tree 或自定义树,该树的节点可能有 26 个指针来获取下一个字母。

【讨论】:

    【解决方案3】:

    我在搜索和排序包含 1600 万行大学结果数据的数据库时遇到过这个问题(印度大学很大 :))。使用 MyISAM 而不是 InnoDB 并保持字段上的索引与 where 子句中的 相同顺序 完全相同,我们体验到了惊人的改进。

    这将使 MySQL 变得更快,但为了使 PHP 变得更快,我们只发现 Intel Xeon 适合此目的。对于测试环境,我们在多 CPU 四核 Xeon 服务器上安装了一个虚拟服务器,该服务器具有丰富的 RAM(16GB 是 4 年前丰富的)。我们在那里运行 PHP 脚本,MySQL 服务器位于附近的另一台服务器上,结果异常快速。仅供参考,我们没有任何线程或特殊代码,但是当我们的高端台式机和带有台式处理器的笔记本电脑似乎需要很长时间才能运行相同的脚本时,我们的普通脚本在那种环境中以惊人的速度运行!

    不知道这是否会对您有所帮助,但只是想分享我的经验!

    【讨论】:

      猜你喜欢
      • 2021-12-25
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多