javascript - 注册检查电子邮件是否存在而不检查数据库

标签 javascript php performance algorithm registration

考虑到我想用 Javascript(例如 Angular)制作一个多步骤注册表单,并且我不想在所有步骤完全完成之前做一些 ajax。 我认为可能正在 Javascript 中执行一个函数,该函数将用户电子邮件作为参数来确定数据库中是否存在电子邮件。 但实际上我不希望我的函数执行 Ajax 调用。 考虑每次用户在数据库中注册时应该更新该算法。

这有点难说,但我的意思是应该有一种算法可以在没有项目的情况下确定项目是否存在。 (我知道这看起来有点傻。但实际上并非如此)。

您一次从数据库中获取所有项目,并在了解所有项目的情况下编写算法,在不知道数据库项目的情况下确定给定项目是否存在于数据库中。

考虑登录过程系统可以在不知道用户密码的情况下判断用户密码是否正确。系统只知道一些关于用户密码的事情(散列或 md5 或...)

因此我们可以在现有用户表上执行一个函数并获取一些值和字符串或...并且使用这些值我们可以在不知道所有项目的情况下检测用户电子邮件是否已存在于数据库中。

我提出问题的原因之一是性能问题(考虑具有如此多记录的用户表。)第二个原因只是为了花哨 :)

最佳答案

从电子邮件地址生成哈希。假设哈希是一个 20 位的值(例如,只取 md5 哈希的低 20 位)。这意味着您需要一个 128K 字节的表,其中每个位要么是 0 要么是 1,具体取决于是否有一封散列为该值的电子邮件。您可以通过生成哈希并在表中查找来轻松检查是否存在电子邮件。 1 表示电子邮件已被使用或存在哈希冲突。 0 保证在生成表时未使用电子邮件。为减少冲突的可能性,请确保表中的位数远大于用户数。 20 位给出 100 万个哈希桶。

关于javascript - 注册检查电子邮件是否存在而不检查数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29698769/

相关文章:

javascript - 为什么 Bootstrap 的 Dropdown Toggle 在某些环境下有效而在其他环境下无效?

PHP5 : get imported namespaces list

android - 在 Scala 中将实例从 Set 移动到另一个

python - 为什么 PyQt 应用程序启动这么慢?

mysql - 优化更新语句

javascript - 如何将内容添加到 JQuery 流程图数据数组工具提示

javascript - 如何使用 Bluebird promise ( Mongoose )进行 findOneAndUpdate

php - 使用 laravel mysql 将列的数据转换为多列(将列的数据转换为特定列)

javascript - 后退按钮是通过 JS 还是 PHP 实现的?

javascript - 如何使用代码注入(inject)调试 Chrome 扩展示例?