[c#]BPlusTreePrototype - B+树的C#实现
这里贴一个C#版的B+树实现,大家首先可以不用太去关注算法本身(算法本身我也不是本人所写,大家如果关心算法,可以先去了解一下B+树的原理,然后再去看里面相关代码),可以把它认为是一个高效的持久hashtable(用本地文件方式持久,基于效率考虑,最好不好每次put的时候都commit,由于文件写入有buffer,如果程序/服务器突然shutdown,有可能冲坏文件,这点大家在实际应用中自行考虑;由于我之前的应用为一个windows服务,忽略了服务器突然shutdown的情况,只是在服务stop的时候去commit)。这个Prototype是我在遇到一个key-value问题时候,压力测试的雏形,之后为了一些应用的方便做过一些修改,这里贴的基本上是当时最原始的版本,大家可以根据自己的需要在此基础上修改。
Features:
1)基于本地文件方式持久;
2)支持多种key的方式:string、int、object,如果需要扩充大家可自行实现ITreeIndex;
Demo应用背景:
之前一个项目中,碰到一个短信内容去重问题,由于业务上无法控制,只能从逻辑层面去处理;最早别人的做法是在数据库中建一张表,把手机号码和短信内容两个字段建立成符合主键,每次验证通过insert是否成功去判断是否重复,后来随着数据量的不断增大,这种处理方式成为一个很大瓶颈。后来我再考虑如何优化时,看到之前的处理的实质就是利用数据库主键的唯一性来处理,于是想到很多数据库主键唯一性的实现原理,其实都用到B+数算法,于是提出如下改进方案:将手机号+短信内容md5加密做为key,然后维护一棵B+树去处理;
代码结构:
代码下载地址: