让我们说。如果我在我的系统上注册了1,000,000个用户,并且我有500个名字的列表。
我想根据系统上的用户数量对这些名称进行交叉检查,以查看哪些名称/用户已在db上注册。
这样的过程会显着减慢应用程序的速度吗?或者这种事情是否一直在发生?
也许我可以每隔30分钟缓存一次结果,所以我不必每次都调用它。
编辑>>一点澄清:
我忘了提到我试图更新500个名字的名单。因此,如果'foobar'和'joe'在此列表中并且也在db中注册,那么我想要做的就是从列表中删除'foobar'和'joe',给我498个名字。
我不认为做这样的事情是合适的:
User.where('name in (?)', Array('foobar', 'joe'))
我会做类似的事情:
User.each do |registered_user|
index = list.index(list.find{ |user| user.screen_name.downcase == registered_user.screen_name.downcase })
list.delete_at(index) if index
end
filtered_list = list
上面的代码,是否过度?
答案 0 :(得分:1)
任何现代关系数据库值得它的盐应该能够轻松地对数据库处理500次检查,而不会影响其他查询,提供您的表格结构正确(唯一键,索引)经常搜索的字段等)
答案 1 :(得分:0)
如果你聪明地做,它可以非常快。让数据库完成工作。
SELECT * FROM USERS WHERE Name IN ( <generated list of your 500 user name candidates>)
返回的列表将是数据库中已存在的500个列表。比如调用会很快,在慢速数据库上最多只需几秒钟。
干杯, 丹尼尔