# Mushroom
**Repository Path**: bubbleit/Mushroom
## Basic Information
- **Project Name**: Mushroom
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: BSD-3-Clause
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2018-04-08
- **Last Updated**: 2024-06-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## Mushroom(蘑菇):分布式内存索引
[English Version of README](./README.en.md)
[](https://github.com/UncP)
[]()
[](https://travis-ci.org/UncP/Mushroom)
[](./LICENSE)
#### Mushroom是一个C++11编写、不依赖第三方库的轻量级Linux环境分布式内存索引,它由并发Blink树索引,TCP通信库,RPC框架,Raft一致性算法组成。
### Behold, the power of Mushroom!
### 尝试
`首先运行脚本gen_test_data.sh生成测试数据,然后进入src目录`
`./run index 100,单机测试分布式索引,100是索引数量(因为Raft没有深入优化过,所以请将数量控制在1-1000)`
`./run blink queue 100,测试多线程索引(通过队列),数量可以是1到1000万`
`./run blink thread 100,测试多线程索引,数量可以是1到1000万`
`./run art 100,测试Adaptive Radix Tree,数量可以是1到1000万`
### 版本信息
| 版本 | 备注 |
|:------:|:---------------------------:|
| 0.1.0 | |
| 0.2.0 | 读写锁并发索引 |
| 0.2.1 | 锁管理器优化 |
| 0.3.0 | 引入前缀压缩,Blink树占用内存减少约 9.1 %|
| 0.4.0 | 实现映射队列,减少程序使用内存超过 50 %|
| 0.4.1 | 合并锁管理器与页面管理器,使每次操作减少1把锁|
| 0.4.2 | 修改根节点分裂方式 |
| 0.4.3 | 增加测试策略,多线程不经过队列直接进行任务|
| 0.4.4 | 重构锁管理器 |
| 0.5.0 | 修复从版本0.4.1到0.4.4一直存在的**bug**(原子操作bug)|
| 0.6.0 | 共享内存映射支持多进程,修复搜索**bug**,正确实现并发Blink树|
| 0.6.1 | 二次哈希页面管理器,实现页面的懒惰分配|
| 0.6.2 | 减少对标准库的依赖,加快编译速度,减少程序体积约42.1%|
| 0.6.4 | 使用posix自旋锁,优化MushroomDB和BLinkTree结构 |
| 0.7.0 | 日志结构合并树(LSM Tree) |
| 0.8.0 | TCP通信库、RPC框架 |
| 0.9.0 | Raft |
| 0.9.1 | ACID (批操作)、修改加锁策略 |
| 0.9.2 | 优化Raft状态变化,提高Liveness |
| 1.0.0 | 分布式内存索引 |
| 1.1.0 | Blink树结点从1/2满提高到2/3满,降低内存使用率约12% |
| 1.1.1 | 优化Raft内存使用(牺牲可读性) |
| 1.2.0 | Adaptive Radix Tree |
| 1.2.1 | 移除锁管理器,每个页面一把锁,性能提升约10% |
| 1.2.2 | 引入布隆过滤器进行读写优化(然并卵) |
### 其他
+ 你可以在这个[知乎专栏](https://zhuanlan.zhihu.com/b-tree)里找到**Mushroom**的介绍
+ 分布式索引只是完成了单机功能,而且没有任何优化,所以较新的版本里`./run index`这个命令并不支持