关于绩效和实施的问题非常广泛和公开:
程序
我已经构建了一个程序,允许用户导入包含用户名和电子邮件地址的excel电子表格。此电子表格可以有多达100,000个独特的记录。
需求
此程序的要求是检查数据库中的副本,以防止将同一用户保存两次。
The Issue
当涉及到检查副本时,我希望遇到的问题是性能--我正在寻找最快/最有效的方法来验证唯一的用户(基于名称和电子邮件地址)。
我的第一个解决方案是在导入时将所有现有成员缓存到一个HashMap中,这样我就可以遍历地图并逐一比较正在上传的记录。这里显而易见的Pro是一个数据库调用--但是,如果我的数据库有100万用户存储,我认为这可能会使我的应用程序崩溃或严重滞后。
第二个解决方案是调用每个记录的数据库,查看用户名/电子邮件是否已经存在。我不确定这是否可取,因为50,000个用户将等于50,000个数据库调用--对我来说听起来不太好。
在上面列出的两个方案中,是否有一个首选的解决方案,或者这个任务的任何方面我在这里没有考虑到?(批处理、数据库查询模式等)。
如有任何意见请见谅,谢谢!
注*我使用的是Server数据库(尽管我希望数据库无关,但我愿意接受任何SQL建议)
发布于 2016-04-25 15:56:03
如果数据库支持这样的特性,则可以使用MERGE语句或INSERT IGNORE,以便所有重复的记录都被静默丢弃,如果记录已经存在,则可以跳过测试。
合并:%28SQL%29
MySQL插入忽略:https://dev.mysql.com/doc/refman/5.5/en/insert.html
发布于 2016-04-25 15:52:24
添加电子邮件和用户名列的唯一约束。如果要更新重复项,请使用数据库支持的UPSERT语法。
https://stackoverflow.com/questions/36845312
复制相似问题