在MySQL中跳过重复条目的最佳实践

时间:2011-06-07 08:54:54

标签: php mysql rss aggregation simplepie

我之前编写了一个feed聚合器,但我正在尝试优化它。在过去,使用simplepie(php类)来解析feed,我已经为每个feed项使用了get_id()函数来返回一个hash(一个md5混合的link + title)。我将这个“id”存储为MySQL中的“remote_id”。但是为了确保我没有重复,我一直在为每个feed项执行SELECT查询,以确保“remote_id”不存在。考虑到我正在查看1000个Feed,这似乎效率低下。

将remote_id转换为唯一密钥然后让数据库无法在每次传递中写入新记录是否最有效?任何其他方法来设计这个更好吗?

1 个答案:

答案 0 :(得分:1)

是的,如果密钥在mysql中应该是唯一的,那么将它定义为唯一密钥通常是个好主意。

当插入可能的重复项时,您可以使用PDO并尝试{} catch(){}语句来过滤它们,它们将引发异常。您无需事先检查。

我在类似情况下使用类似的东西(伪代码警报):

        $stmnt = $this->dbh->prepare('INSERT QUERY');  

        try {
            $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $this->dbh->beginTransaction();

            $stmnt->execute($celss);

            $this->dbh->commit();
        } catch (Exception $e)
        {
            $this->dbh->rollback();
            $this->invalidRows[] = array($cells,$e->getMessage());
            continue;
        }
相关问题