缓存数据与多个查询

时间:2016-04-25 15:47:20

标签: java database

非常广泛&关于表现的公开问题&在这里实施:

该计划

我已经构建了一个程序,允许用户导入包含用户名和电子邮件地址的Excel电子表格。此电子表格最多可包含100,000条唯一记录。

要求

此程序的要求是检查数据库中的重复项,以防止同一用户保存两次

问题

我预计遇到的问题是检查重复项时的性能 - 我正在寻找验证唯一用户的最快/最有效的方法(基于名称和电子邮件地址)。

我的第一个解决方案是在导入时将所有现有成员缓存到HashMap,这样我就可以遍历Map并逐个比较我上传的记录。显而易见的Pro是一个单一的数据库调用 - 但是如果我的数据库有100万用户存储,我认为这可能会崩溃或严重滞后我的应用程序。

第二种解决方案是根据每条记录调用数据库,以查看用户名/电子邮件是否已存在。我不确定这是否可取,因为50,000个用户将等于50,000个数据库电话 - 对我来说听起来不太好。

是否有一个首选的解决方案,而不是上面列出的两个,或者这个任务的任何方面我没有在这里考虑? (批处理,数据库查询模式等)。

感谢您的任何意见,谢谢!

注意*我使用的是SQL Server数据库(即使我希望与数据库无关,我也可以接受任何SQL建议)

2 个答案:

答案 0 :(得分:1)

如果您的数据库支持这样的功能,您可以使用MERGE语句或INSERT IGNORE,以便静默地丢弃所有重复记录,如果记录已经存在,您可以跳过测试。

MERGE:https://en.wikipedia.org/wiki/Merge_%28SQL%29
MySQL INSERT IGNORE:https://dev.mysql.com/doc/refman/5.5/en/insert.html

答案 1 :(得分:0)

将约束UNIQUE添加到电子邮件和用户名列。 如果要更新重复项,请使用数据库支持的UPSERT语法