V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
cat
V2EX  ›  问与答

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

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