Page 244 - 《软件学报》2021年第10期
P. 244
3216 Journal of Software 软件学报 Vol.32, No.10, October 2021
3.2.3 读性能
本节验证索引设计对系统读性能的影响.实验对比 LogStore、LogBase 和 HBase 这 3 个系统的随机访问的
性能.数据集大小为 100 万.数据读取大小的范围为 1K~80K.3个系统的总时间由网络延迟和执行时间组成.一旦
随机访问请求完成,YCSB 即将结果返回给客户端,即请求的数据记录总量等于客户端与服务器交互的网络次
数.LogStore 和 LogBase 可以利用内存索引来精确定位记录的位置.另一方面,HBase 需要使用全表扫描的方法
来检索数据(布隆过滤器可以减少需要扫描的数据块).从图 10(a)所示结果可以看出:HBase 的性能要优于
LogBase,因为布隆过滤器大幅度减少了数据块的扫描.得益于 ART 树的高效以及一次 IO 模型,LogStore 的读性
能要比其他两个系统优 10 倍左右.实际上,LogStore 与理想性能更接近.在实验中观察到的 LogStore 的 TPS 约
为 5 700,但网络延迟为 156us,因此理想性能约为 6 400.
单拷贝系统中读操作大部分都通过索引进行,因此,调研索引访问的成本相当有必要.这可以为此类单拷贝
系统的查询优化提供很好的建议.为了验证索引对系统性能的影响,我们修改了 YCSB 基准,允许它随机获得一
批记录,然后再将结果返回给客户端.索引访问的批处理大小范围从 1K~16K.如图 10(b)所示:当获取的数据记录
总量小于 8K 时,索引访问更有利.但当数据大小超过 8K 时,顺序访问优于索引访问.我们将这个简单的启发式方
法集成到 LogStore 中,当访问数据部分大于 1/10 时,启动表扫描方法.
(a) 读性能测试 (b) 索引访问开销
Fig.10 Read performance and index access cost
图 10 读性能测试和索引访问开销
4 总结与展望
本文主要介绍 LogStore KV 存储系统的设计.该系统遵循日志即数据的设计,其中,所有持久数据仅存储在
日志文件中,统一数据与日志的存在方式.这种新颖的存储架构将内存数据结构与其持久表示解耦,消除了传统
WAL 数据系统设计的很多开销.与传统的三阶段恢复设计(即扫描,重做,撤消)相比,单拷贝系统还极大地提高了
恢复能力.由于日志索引包含了最新一致状态下的数据项所需的精确信息,因此从系统恢复只需重建索引.此
外,与大多数 DBMS 采用的方法不同,该架构不需要设置检查点、写回脏数据以及强制执行 WAL.通过将最先进
的数据管理方法结合在一起,诸如快速内存访问、LSM 数据组织和缓冲区管理等,LogStore 在现代内存数据库
系统和传统的基于磁盘的系统之间达到性能与成本的一个最优点.在这种设计下,LogStore 具备线性扩展能力,
在配置足够的情况下,每秒可达百万次的一致性读/写操作.同时,LogStore 中的读/写延迟限制在 20ms 以内.此
外,其高可用性规范令人满意,即主备延迟可忽略不计.另一方面,LogStore 对数据进行分片,当出现数据偏斜的
情况时,会造成系统资源使用严重不均衡.系统的单线程执行模型对复杂操作支持不够,因此,LogStore 不适合分
析型工作负载.目前,LogStore 也尚不支持跨分片分布式事务.增加负载均衡模块以及支持跨分片事务,留待未来
加以研究.
实际上,日志即文件的设计是 LogStore 此类系统的优点.但在某种程度上而言,这也是单拷贝系统不足之处
产生的根源.单拷贝系统将数据按照时间先后顺序写入磁盘,没有维护数据的有序性,失去了传统数据库系统聚
簇存储的优点,对读操作不友好,特别是范围读取操作.因此,隔一段时间之后,系统不可避免地需要进行合并操
作,对 key 排序.这个过程相当耗费资源.利用机器学习为数据集动态选择最优的数据组织方式,减少这个过程是