【问题标题】:Which is the best and fastest way to compare two urls?比较两个网址的最佳和最快方法是什么?
【发布时间】:2010-03-09 15:06:46
【问题描述】:

我有两个表,其中包含从不同来源获取的 url 列表。

我想找到常见的条目并将它们放在单独的表中。

这就是我正在做的:

  1. 在获取它们时找到 url 的 md5 哈希值。
  2. 将它们存储在一个列中。
  3. 我以数组的形式获取一个表,通过它运行一个循环,然后插入其他表中的值,其中 md5 哈希值相同。

编辑:我应该去掉“http://”和“www”的网址吗?

我想知道任何其他更好更快的方法,我可以使用它来执行上述操作。

我正在使用 PHP + MySQL

【问题讨论】:

  • 我有点好奇——谁能告诉我你为什么要对 URL 进行哈希处理?是不是为了得到一个更容易比较的数据类型(而不是字符串搜索)?
  • 一点警告:如果 URL 的数量很大,MD5 会发生冲突 - 导致误报。

标签: php mysql compare


【解决方案1】:

如果您需要真正的速度,MD5 会有点慢。试试MurmurHash

在哈希计算之前你应该做以下转换:

  • 去掉“http://”和www。
  • 去除尾部斜杠
  • 标准化 URL (urlencodeit)

【讨论】:

  • 顺便说一句,不确定 MurmurHash 的 PHP 实现会比 md5 函数快。这需要测试。无论如何,为了真正的速度,你可以制作 PHP 插件。
  • 我猜想在 PHP 中实现 MumurHash 会很困难。还有其他更快的哈希方法吗?
  • 你可以使用 mhash 扩展,但我怀疑你会得到任何速度提升:develobert.blogspot.com/2007/09/php5-hash-benchmarks.html
【解决方案2】:

尝试类似:

INSERT INTO table3  (SELECT url FROM table1, table2 WHERE table1.hash = table2.hash)

这不是一个有效的 SQL 语句,但像这样的嵌套查询应该从 table1 和 table2 中读取通过它们的哈希匹配的 url 并将它们放入 table3。

编辑: 如果你想清理你的输入 url(例如删除 GET 变量),我会在将它们保存到 tabel1 和 table2 之前这样做。我不会将 http 和 www 删除为“https://somesite”和“http://somesite”以及“www.somesite.com”和“somesite.com”可能有不同的内容。

【讨论】:

    【解决方案3】:
    SELECT * FROM table1 WHERE hash IN (SELECT hash FROM table2)
    

    您可能还想了解表连接的概念。

    【讨论】:

      猜你喜欢
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      相关资源
      最近更新 更多