2

我之前写过一个提要聚合器,但正在尝试对其进行一些优化。过去,使用 simplepie(php 类)解析提要,我使用 get_id() 函数为每个提要项返回一个哈希值(链接 + 标题的 md5 组合)。我将此“id”存储为 MySQL 中的“remote_id”。但是,为了确保没有重复项,我一直在对每个提要项目进行 SELECT 查询,以确保“remote_id”不存在。考虑到我正在查看 1000 个提要,这似乎效率低下。

将 remote_id 转换为唯一键然后让数据库在每次传递时都无法写入新记录是最有效的吗?还有其他更好的设计方法吗?

4

1 回答 1

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;
        }
于 2011-06-07T09:23:30.897 回答