开发者社区> 问答> 正文

一个万亿级密码库的搭建和查询问题

想做一个md5查询的密码库
例如123的md5值是202cb962ac59075b964b07152d234b70

我们想实现用户输入该md5值能查询得出123这个明文值
存储内容就这么简单,但是由于数量是几万亿甚至十几万亿为级别的
存储占用的空间和查询速度就成了问题。
尝试过mysql,占用的空间有些大。
目标是一万亿条使用10T硬盘以下,有没有什么好的思路?

展开
收起
落地花开啦 2016-02-06 14:24:28 2444 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    首先MD5是会碰撞的。如果你尝试将16个BYTE连起来作为整个空间的索引(2^128位空间索引,不过很恐怖。1T才2^40),就是现实的话,也未必你能到你的要求。因为确实存在,两个明文不一样,却有相同MD5的情况。
    其次,如果你能确定是对密码处理。而且知道密码的长度上限,比如不超过16个字符。那么密码正常情况下,是键盘的可输入ascii值。例如,密码不是出现一个字符等于 0 ,或者 0x9。实际上,也就是大小写,几个标点,加0到9。由此,你的全遍历方式就少了。余下的事情是,将这些所有组合方式,你自己琢磨有多少可能吧。假设就是 26个字母输入,8个密码以内的长度,那么你最多只要 27^8就搞定。如果密码长度为4个。你可以默认前插4个char 为0 的字符。27^8是小于 2^5^8 = 2^40的。由此,你的T级存储还有的机会。
    你要做的事情就是把可能的MD5值,按照大小排序,存储起来。每个记录里,包含MD5值和对应明文。
    你可以多硬盘多服务器的存储。通过MD5的前面字节的情况,选择具体的服务器查询。相当于多极索引的方式。

    2019-07-17 18:38:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
持续9年国际排名第一的宽表数据库概述 立即下载
腾讯TB级别的海量日志监控平台 立即下载
金融级PostgreSQL监控及优化 立即下载