# 9.1 Kvstore

## 环境安装
```shell
sudo apt install libxml2 libxml2-dev
```

## 需求
- ntyco需要作为kvstore的submodule,通过git clone一次下载。 **完成**。
- README需要包含编译步骤，测试方案与可行性，性能数据。
- 增量持久化需要包含完整的指令。
- 全量持久化保存数据集。 
- 持久化的性能数据。

- 特殊字符，可以解决redis的resp协议。
```
简单字符串
+OK\r\n
错误
-ERR message\r\n
整数
:1000\r\n
批量字符串
$6\r\nfoobar\r\n
数组 
*2\r\n$3\r\nfoo\r\n$3\r\nbar\r\n
```

- 实现配置文件，把日志级别，端口ip，主从模式，持久化方案。 **完成**。
- 持久化落盘用io_uring，加载配置文件用mmap。
- 主从同步的性能，开启与关闭性能做到。
- 主从同步60ew条,出现的coredump。
- 主从同步用ebpf实现。
- 内存池测试qps与虚拟内存，物理内存。
- 实现一个内存泄露检测组件。


### 面试题
1. 为什么会实现kvstore，使用场景在哪里？
2. reactor, ntyco, io_uring的三种网络模型的性能差异？
3. 多线程的kvstore该如何改进？
4. 私有协议如何设计会更加安全可靠？
5. 协议改进以后，对已有的代码有哪些改变？
6. kv引擎实现了哪些？
7. 每个kv引擎的使用场景，以及性能差异？
8. 测试用例如何实现？并且保证代码覆盖率超过90%
9. 网络并发量如何？qps如何？
10. 能够跟哪些系统交互使用？


### 架构设计
![image](https://disk.0voice.com/p/py)



