我有以下问题:
我有一个饲料捕获器,可以每半小时捕获不同来源的新闻。
我只插入数据库中已有URL的条目(URL用于查看记录是否已存在于数据库中)。
即使这样,我也会得到一些重复的条目,因为有些网站会报道相同的新闻(通常来自路透社等新闻来源)。我可以在插入过程中查找这些重复的条目,但我认为这会延迟插入时间。
所以,我稍后可以通过标题找到这些重复的条目。但我认为这种搜索很慢。然后,我的想法是从标题生成一个数字字段,然后通过这个数字搜索重复的标题。
我可以使用哪种编码(我认为与base64相反)对标题进行编码?
好吧,我不在乎数据库中有重复的条目,我只是不想向用户显示。像谷歌一样,它可以过滤重复的结果,但是如果你愿意的话可以显示。
我希望我解释得很好。提前谢谢。
答案 0 :(得分:2)
填写MD5
和标题的URL
哈希,并在其上构建UNIQUE
索引:
CREATE UNIQUE INDEX ux_mytable_title_url ON (title_hash, url_hash)
INSERT
INTO mytable (url, title, url_hash, title_hash)
VALUES ('url', 'title', MD5('url'), MD5('title'))
要选择Google
(每个title
一个结果),请使用此查询:
SELECT *
FROM (
SELECT DISTINCT title_hash
FROM mytable
) md
JOIN mytable mo
ON mo.url_title = md.title_hash
AND mo.url_hash =
(
SELECT url_hash
FROM mytable mi
WHERE mi.title_hash = md.title_hash
ORDER BY
mi.title_hash, mi.url_hash
LIMIT 1
)
答案 1 :(得分:0)
因此您可以使用仅包含基于标题和网址的编码密钥的新表,然后您可以在其上添加密钥以加速搜索。但我不认为你可以使用有效的算法将字符串转换为数字。
用于加密使用
SELECT MD5(CONCAT('title', 'url'));
并在每次插入之前测试此表上是否存在title和url的编码串联。
答案 2 :(得分:0)