我必须从很多文本文件中提取单词,并检查它们是否存在于phpmyadmin中的这个大型wordnet数据库中。由于循环和检查(mysql),执行需要3到4分钟。
有什么方法可以优化吗?增加数据库缓冲区大小会有所帮助;如果是,那么该如何做?
答案 0 :(得分:0)
只需将所有单词一次性加载到php内存中作为hashmap。像
$words = array(
'foo' => 1, 'bar' => 1, 'baz' => 1
);
//then check like
$exists = isset($words[ $word ]);
答案 1 :(得分:0)
您可以在树结构中缓存内存中所有单词的索引,并存储指向记录的指针,并指向找到单词的位置的偏移量。您可以使用Binary Tree或自定义树,其中包含可能有26个指针的节点,以获取下一个字母。
答案 2 :(得分:0)
我曾经遇到过这个问题,在搜索和排序数据库时有1600万行大学结果数据(印度大学很大:))。我们使用MyISAM
代替InnoDB
获得了惊人的改进,并且在 相同序列 中的字段上保留了索引,如同where
条款。
这将使MySQL变得快速,但为了使PHP快速,我们只发现英特尔至强适用于此目的。对于测试环境,我们在具有丰富RAM的多CPU四核Xeon服务器上安装了一个虚拟服务器(4年前有16GB容量)。我们在那里运行PHP脚本,MySQL服务器驻留在附近的另一台服务器上,结果非常快。仅供参考,我们没有任何线程或特殊代码,但是当我们的高端台式机和带台式机处理器的笔记本电脑运行同样的脚本时,我们的正常脚本只是以极快的速度运行!
不知道这对你有帮助,只是想分享我的经验!