本科毕设做一个海量小文件存储系统,数据库选型? paper 推荐? - V2EX
alexanderchiu

本科毕设做一个海量小文件存储系统,数据库选型? paper 推荐?

  •  
  •   alexanderchiu Oct 10, 2020 4744 views
    This topic created in 2045 days ago, the information mentioned may be changed or developed.

    导师大概给了一个这么一个课题: 做一个 vfs 或者 fuse 兼容的海量小文件存储系统,文件要按照目录结构组织,场景是读远大于写。 导师给的基本想法就是数据存在 hbase 中,上面套一层 fuse 或者 vfs 。 不知道大家有没有其他更好的数据库选型推荐?最好开源,可以魔改。

    最近在看 facebook 的 haystack,不过那个其实有点老了。

    26 replies    2023-01-09 14:59:23 +08:00
    heyjei
        1
    heyjei  
       Oct 10, 2020
    啥学校啊,你们的毕设都这么高端嘛?

    按你导师的想法来就好了啊,NoSQL 套一层 vfs 。这里的 NoSQL,你可以换成其他的 key value store 的数据库,比如 levelDB,这样好集成一点,不然,你搭建一个 hbase,麻烦的要死,等你把 hbase 搞明白,估计 vfs 的兴趣劲也过了
    alexanderchiu
        2
    alexanderchiu  
    OP
       Oct 10, 2020
    @heyjei 上海某 985... 哎不过 levelDB,rocksDB 这种基于 LSM 的存储引擎场景好像都是写大于读的?读放大可能比较严重? 嗯嗯不过这个思路是不错,hbase 太他妈麻烦了哈哈哈哈哈
    heyjei
        3
    heyjei  
       Oct 10, 2020
    @alexanderchiu 中间加一个 cache,这个 cache 就是你论文的亮点和难点
    kuro1
        4
    kuro1  
       Oct 10, 2020
    badger
    stephenxiaxy
        5
    stephenxiaxy  
       Oct 10, 2020
    clickhouse ?
        6
    alexanderchiu  
    OP
       Oct 10, 2020
    @heyjei 好思路 我研究下
    alexanderchiu
        7
    alexanderchiu  
    OP
       Oct 10, 2020
    @kuro1 这个好 刚好我就想用 go 来写毕设
    alexanderchiu
        8
    alexanderchiu  
    OP
       Oct 10, 2020
    @stephenxiaxy clickhouse 我理解还是偏数仓,不像 nosql 一样提供 kv 这种关系模式而是用传统关系模型 不知如何结合起来呢
    AngryPanda
        9
    AngryPanda  
       Oct 10, 2020 via Android
    本科毕业设计这个难度的确可以
    xe2vherd
        10
    xe2vherd  
       Oct 10, 2020 via iPhone   2
    盲猜上交? 其实这种毕设比各种基于机器学习的 xxx 有意思多了,要是我本科能遇到这种毕设就好了。
    alexanderchiu
        11
    alexanderchiu  
    OP
       Oct 10, 2020
    @zmxnv123 猜错了 hh 我也觉得做偏 system 的会更有意思哈哈
    XiaoxiaoPu
        12
    XiaoxiaoPu  
       Oct 10, 2020
    这个“海量”是多海量?要是海量到单机存不下,可能还得考虑分布式吧。
    alexanderchiu
        13
    alexanderchiu 
    OP
       Oct 10, 2020
    @XiaoxiaoPu 老师要求的是分布式。但毕竟是本科毕设所以要求可能会低一点...测试数据量可能就几个 G 或者十几 g,然后每个文件几十 kb-几 mb
    twl007
        14
    twl007  
       Oct 10, 2020 via iPhone
    套个 rocksdb 也没啥不好的 参考 Ceph 的 OSD 部分 实现 用 rocksdb 去缓存整个存入文件的索引 可以看看老版本基于 Filesystem 的实现

    基本就是文件切块直接存盘到系统 fs 上面 然后按照一定规则生成目录 避免 fs 在某个目录下太多文件导致效率降低 然后利用 key-value 一类的数据库来存文件的具体索引 分布式的话就在上面再套一个 你可以试试 Cassandra 或者选其他的分布式 key-value 数据库 记录一下某个文件具体落到某个那个位置去就行 然后具体位置再由具体的 key-value 去把文件块找出来返回就行

    简单点的实现可以参考下 Minio ?但是那个是对象存储 不知道是不是符合你导师的意思就是了…… 看你导师的意思应该是让你实现个基于块存储吧
    XiaoxiaoPu
        15
    XiaoxiaoPu  
       Oct 10, 2020
    分布式的话,需要注意到 LevelDB 、RocksDB 是单机嵌入式 KV 存储引擎,分布式相关的工作需要你自己做。
    twl007
        16
    twl007  
       Oct 10, 2020
    LevelDB RocksDB 不要直接拿来存文件 用来存你具体文件的 block 的索引就好 Ceph 的 BlueStore 底层就是用 RocksDB 来存文件块索引的 相当于 XFS 里面 inode

    分布是的话你套两层就行了 第一层是分布式的 key-value 数据库 用来记录所有文件的记录以及这些文件存在哪些节点上方 在单个节点上你可以直接把文件按照一定规则写入到不同的目录下面 然后有一个 daemon 一类的帮你存取文件 如果真的是真海量的话 你具体的 storage node 上面其实也需要一套 RocksDB 来帮你缓存具体的文件位置来加快索引速度 如果问减少的话其实按照一定 hash 来存就行 你甚至可以在每个机器上面跑一个 Minio 然后再用一个集中化的数据库来管理那些文件存到那个 Minio 上面都行……
    twl007
        17
    twl007  
       Oct 10, 2020
    开源的话有个符合你要求的
    https://github.com/chrislusf/seaweedfs
    catror
        18
    catror  
       Oct 10, 2020
    要分布式,还是部署 HBase 吧,或者其他的分布式 KV 存储也行,都一样。先别考虑太多,能把流程跑通再优化。
    alexanderchiu
        19
    alexanderchiu  
    OP
       Oct 10, 2020
    @twl007 老哥牛逼 大概有了比较清晰的认识。写入不同目录的话用 hash ? 嗯由于想用 go 写,感觉可以试试楼上提的 BadgerDB,也是类似于 rocksdb 。 是不是可以这么理解,第一层的数据库的 key 是文件名,value 是节点名 /目录名 第二层数据库的 key 是文件名,value 是 block 的位置?
    alexanderchiu
        20
    alexanderchiu  
    OP
       Oct 10, 2020
    @catror 好可以先试试 hbase
    twl007
        21
    twl007  
       Oct 10, 2020
    @alexanderchiu 对 第一层其实存具体的节点和文件位置就行 止痒方便你在 vfs 或者 fuse 上面写的时候能生成具体的目录结构 然后 storage node 上面再去具体负责单个文件的存储 然后用 key-value 的数据库来做索引 负责把文件从具体位置捞出来

    用 Hash 得话稍微注意一下文件目录的数量就行 或者你可以换个别的方式 Hash 的问题就是在于你的一些参数变了可能所有文件的位置都要重新来一遍 不过因为是毕业设计所以应该也不用去考虑这些复杂的问题 但是如果文件数目多的话你要注意具体的 Node 上面单个目录下文件的数量 具体的设计可以参考 Ceph 的 Filestore 的实现
    my3157
        22
    my3157  
       Oct 10, 2020
    tikv + fuse
    GaoGeYang
        23
    GaoGeYang  
       Oct 11, 2020 via iPhone
    巧了,我本科毕设也是类似的选题,不过思路不太一样。文件存储用的是 FastDFS,然后用数据库记录文件目录路径。
    chrislusf
        24
    chrislusf  
       Oct 12, 2020
    SeaweedFS filer store 可以支持一般的 key-value store,比如 Cassandra. 现在正好 HBase 的还没有支持。欢迎参与开发!不过工作量可能比较小。加一两个文件就可以了。
    9LCRwvU14033RHJo
        25
    9LCRwvU14033RHJo  
       Oct 16, 2020
    @heyjei
    就是啊。读远大于写,明显就应该用 cache 。套一层 memcached ?
    peterlitszo
        26
    peterlitszo  
       Jan 9, 2023
    OP 还在吗,最近本科毕业设计也有点想写偏底层的东西,请问能看看你的论文参考参考咩?
    About     Help     Advertise     Blog     API     FAQ     Solana     2565 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 122ms UTC 16:02 PVG 00:02 LAX 09:02 JFK 12:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86