V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
cat
V2EX  ›  问与答

好奇:像 CMD5 这样的网站的,数据是怎么存储的?如何快速索引

  •  
  •   cat · 3 天前 · 451 次点击
    这两天在做一个文件唯一性的工具,需要存文件的哈希值,就突然想到 CMD5 ,号称创建了 90 万亿条数据
    我们简单的设想为就是 “哈希值-明文” 这样的数据结构,是如何做到快速查找的呢
    7 条回复    2024-11-25 16:28:17 +08:00
    yuzo555
        1
    yuzo555  
       3 天前
    hash 简直是最理想的分区、分表存储的数据类型了
    长度固定,概率均匀...
    cat
        2
    cat  
    OP
       3 天前
    @yuzo555 可是这么大的数据量,分表不会分出太多太多太多表吗 😂
    rrfeng
        3
    rrfeng  
       3 天前
    太多表有啥问题呢,又不用全查,按前缀分想分几级分几级
    InternetExplorer
        4
    InternetExplorer  
       3 天前
    直接用文件系统存,每级目录放 1000 个文件夹,只要 5 级目录,最终的目录里放对应的数据文件
    play78
        5
    play78  
       3 天前
    哈希值是 16 进制的。 概率还是均匀的。
    常见的用字典树就可以了。代码逻辑还非常简单。
    时间复杂度是 O(16xN), 查找非常快。而且还不用全部加载到内存,理论上可以直接索引。
    唯一占用的就是磁盘存储。
    cat
        6
    cat  
    OP
       3 天前
    @InternetExplorer @play78 我以为当磁盘文件达到一定数量级之后,也会拖慢速度,尤其是当有多个查询同时发生时,看来是我多虑了
    play78
        7
    play78  
       3 天前
    @cat #6 文件系统确实有 inode 限制,一方面是数据只会新增,一方面数据量非常大。
    所以,要么是合并小文件,文件超出大小后就切分子目录。
    但是这个网站如果数据量真的非常大,我觉得应该是自己实现一个文件系统,裸系统,只处理文件。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1380 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 17:37 · PVG 01:37 · LAX 09:37 · JFK 12:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.