我正在使用php和mysql制作feed聚合器。并撰写一篇关于必须包含数学的论文。
我有一个表feeds
(id,title,description,link),其中id
是主键。
当我收集新的feed时,我需要将它们添加到数据库中,但我不能让任何重复。我看到两种方法:
1)对于每个Feed运行如下:
SELECT id FROM feeds
WHERE title=$feed.title AND description=$feed.description;
看看它是否会返回任何Feed。
2)假设来自不同来源的Feed从不匹配。在这种情况下: 每个Feed源都运行如下:
SELECT title, description, source FROM feeds WHERE source=$source;
然后使用PHP来匹配针对此数组的收集的提要。
我承认,我没有任何性能问题。但是我正在写一篇关于它的论文,而我必须找到一些方法来应用数学来解决这个问题。我选择了第二种方法,因为它允许我进入有关为什么它更快的数学细节。 但是我怀疑php可能比mysql的工作速度慢得多,并且为每个Feed运行查询实际上可能会更快。
我是对的吗?是否有任何实际理由选择第二种方法?我怎样才能证明我的选择是合理的呢?
答案 0 :(得分:0)
对于数学,请考虑数据库的缩放含义。第一个Feed添加新Feed需要多长时间?第10,000个怎么样?千万分之一?现有Feed数量的增加会以何种方式影响新Feed的添加速度?
答案 1 :(得分:0)
PHP和MySQL:两者都在服务器端运行,而不是像客户端/浏览器中的javascript。
如果你没有超过数百万的数据,那么无论如何都不会很慢。
答案 2 :(得分:0)
为什么不在标题和描述中添加唯一的索引?不知道它是否是最好的表现,但它会以最正确的方式处理你的逻辑。
答案 3 :(得分:0)
我认为最快的方法是在源列上放置一个UNIQUE索引,然后简单地执行一个INSERT IGNORE,在一个查询中发送所有收集的提要,甚至不用手动检查重复项。这不仅可以节省每次执行一次查询的处理/网络开销,索引将确保您没有任何重复项(假设源实际上每个Feed都是唯一的)。
答案 4 :(得分:0)
你考虑过使用复合唯一索引吗?
alter table feeds add unique index(title, description);
这会阻止在表中已经存在标题和描述时添加新行。
您必须在大型数据库中执行大量插入才能真正获得性能值。
编辑: 这确实在MYSQL中有一个垮掉Null总是被认为是唯一的,所以你可以有几行输入,它们是title = null和description = null。您应该在尝试插入数据之前检查这一点。