我正在编写一个依赖redis作为其主数据库的node.js应用程序,用户信息存储在这个数据库中。
我目前将用户数据(电子邮件、密码、创建日期等)保存在名称为user:(incremental uid)
. email:(email)
和一个有价值的钥匙(same incremental uid)
。
当有人登录时,应用程序会查找与电子邮件匹配的密钥,email:(email)
以返回(incremental uid)
访问用户数据的user:(incremental uid)
.
这很有效,但是,如果用户数量达到数百万(可能,但有点遥远的问题),我的数据库大小将急剧增加,我将开始遇到一些问题。
我想知道如何将电子邮件哈希到一个整数,我可以用它来分类像这样的哈希桶(伪代码):
hash(thisguy@somedomain.com) returns 1234
1234 % 3 or something returns 1
store { thisguy@somedomain.com : (his incremental uid) } in hash emailbucket:1
然后,当我需要为 email 查找这个 uid 时thisguy@somedomain.com
,我使用类似的过程:
hash(thisguy@somedomain.com) returns 1234
1234 % 3 or something returns 1
lookup thisguy@somedomain.com in hash emailbucket:1 returns his (incremental uid)
所以,我的问题以列表形式:
- 这是实用的/有更好的方法吗?
- 如何将电子邮件散列到几位数字?
- 将这些哈希组织到桶中的最佳方法是什么?