-1

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

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

4

3 回答 3

0

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

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

//then check like
$exists = isset($words[ $word ]);
于 2012-05-29T04:08:41.830 回答
0

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

于 2012-05-29T04:08:52.447 回答
0

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

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

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

于 2012-05-29T04:50:39.893 回答