自己实现的一个小 key/value store 玩具,欢迎大家来加星星,拍砖 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
funer
V2EX    分享创造

自己实现的一个小 key/value store 玩具,欢迎大家来加星星,拍砖

  •  2
     
  •   small class="gray">funer
    funeyu 2016-05-03 11:53:50 +08:00 4511 次点击
    这是一个创建于 3499 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简介

    herDB 是一个基于 hash 索引实现的 key/value 小型 nosql ,可以内嵌于 java 程序里。 herDB 存储的文件分为.index 文件与.data 文件; 存储的 key/value 数据都是基于二进制文件存储。

    herDB's jar 才不到 40KB,实现简洁;支持并发操作,并且支持索引文件的扩容功能, get 操作基本上一次磁盘随机读就能定位到数据。

    性能强劲哈

    一千万的数据追加在 100s 以内;索引占据的内存: 100M 左右;随机读在只读模式下 100w 次 /s

    附上代码项目地址

    欢迎大家来怕转哈!!!!!

    第 1 条附言    2016-05-03 13:35:38 +08:00

    好冷清啊 ,都没个人回复啊!!! 好吧 我是新来的

    23 条回复    2016-05-05 08:24:24 +08:00
    lancerliu
        1
    lancerliu  
       2016-05-03 14:20:46 +08:00
    where?
    popo233
        2
    popo233  
       2016-05-03 14:21:33 +08:00 via iPhone
    不会 Java (冷漠脸)
    funer
        3
    funer  
    OP
       2016-05-03 14:45:18 +08:00
    @lancerliu 文中有链接哈
    Bryan0Z
        4
    Bryan0Z  
       2016-05-03 14:49:39 +08:00 via Android   1
    已经 star2333
    homfen
        5
    homfen  
       2016-05-03 15:33:46 +08:00
    撞头像了
    zzzvvvxxxd
        6
    zzzvvvxxxd  
       2016-05-03 15:37:43 +08:00
    纯 SE 的项目吗
    为什么没有 pom = =
    用 aven 吧骚年
    funer
        7
    funer  
    OP
       2016-05-03 15:44:55 +08:00 via Android
    @zzzvvvxxxd 抽时间加上, 对 java 的项目管理工具还在熟悉中
    funer
        8
    funer  
    OP
       2016-05-03 15:46:27 +08:00
    @homfen 额 这,看来是兴趣相投哈~~
    lancerliu
        9
    lancerliu  
       2016-05-03 17:04:41 +08:00
    看到了,灰灰的,没注意
    zhicheng
        10
    zhicheng  
       2016-05-03 19:01:54 +08:00 via Android
    http://github.com/zhicheng/db 欢迎对比一下性能。
    funer
        11
    funer  
    OP
       2016-05-03 19:22:03 +08:00
    @zhicheng 你的那个实现也很简洁,有时间对比下性能~~
    fcicq
        12
    fcicq  
       2016-05-03 20:52:55 +08:00   1
    这种规模实在称不上"创造"啊. 仅索引就超过内存大小之后, 如果楼主还有更漂亮的方法的话再找偶评论.
    funer
        13
    funer  
    OP
       2016-05-03 22:50:50 +08:00
    @fcicq 呵呵只是玩具,弄着玩的;这里只是加快随机读的性能,难免吃内存,你要是有好的方法也可以提出来,可以学习学习~~~
    Andiry
        14
    Andiry  
       2016-05-03 23:07:05 +08:00
    不错, mark 一下研究研究。
    wizardforcel
        15
    wizardforcel  
       2016-05-04 10:19:44 +08:00 via Android
    大二数据结构课的大作业实现过一个,然而早就不知道被我扔哪儿去了。。
    Andiry
        16
    Andiry  
       2016-05-04 11:06:52 +08:00
    为啥不直接用 Cuckoo hash ?
    fcicq
        17
    fcicq  
       2016-05-04 11:39:21 +08:00   1
    @funer
    在 x86_64 体系结构 48bit 页表限制下, 即便一切顺利, 只读的 hash table 也不能超过 256TB. 页表本身也是一种树形的结构. 即便构建多层的 hash bucket 之后你会发现这也是一种类树结构, 也非常类似于改了参数的页表. 用上树的结构只是一个开始, 从那里到"现代"方法之间还有 40 年的距离.
    funer
        18
    funer  
    OP
       2016-05-04 12:20:19 +08:00
    @Andiry 大牛哈, 多谢指导,之前都没有听过这个 Cuckoo hash,学习长见识了;自己瞎弄的一个,只是想着稍微带点自己的东西里面,不成熟~~~~
    exoticknight
        19
    exoticknight  
       2016-05-04 17:18:44 +08:00
    嗯有什么对比优势之类的?
    tabris17
        20
    tabris17  
       2016-05-04 17:31:45 +08:00
    数据一致性有保证么?
    TangMonk
        21
    TangMonk  
       2016-05-04 18:00:52 +08:00
    不错
    funer
        22
    funer  
    OP
       2016-05-05 08:23:18 +08:00
    @exoticknight 只是写着学习用的,对比优势就是个随机读性能好些,基本和 redis 的随机读差不太多
    funer
        23
    funer  
    OP
       2016-05-05 08:24:24 +08:00
    @tabris17 没做到一致性的保证~~~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5107 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 09:19 PVG 17:19 LAX 01:19 JFK 04:19
    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