# 9.1 Kvstore ## 环境安装 ```shell # xml sudo apt install libxml2 libxml2-dev # hiredis client sudo apt install -y libhiredis-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)