论文部分内容阅读
为了适应海量非结构化数据的访存需求,并克服传统关系型数据库和文件存储在可扩展性和性能等方面的不足,键值存储(简称KV存储)系统提供了很好的解决方案(具有数据模型简单,易扩展等优点),被部署在众多应用的基础存储设施中。然而,随着数据规模的不断增长及数据类型的高度复杂化,键值存储系统面临着不同层面的问题:首先,在存储引擎层,基于LSM-tree的存储架构存在严重的读写放大问题,在大规模数据存储下尤为严重。其次,在数据容错层,当前统一的多副本管理方案会进一步加剧系统的读写放大问题。最后,在应用的访存需求层,诸多应用往往仅需访问数据的某些属性值,但已有键值存储系统不能在存储层感知数据的属性特征,导致大量无效的磁盘I/O。上述问题导致键值存储系统的访存效率及扩展性受到严重限制,因此,如何从存储引擎层、数据容错层、应用的访存需求层进行优化设计,是构建高性能高可靠的键值存储系统的关键。本文在存储引擎层,研究了键值存储系统的混合索引机制;在数据容错层,研究了分布式键值存储系统的多副本容错管理;在应用的访存需求层,研究了属性感知的异构内存键值存储系统。本文的主要研究内容和贡献如下:(1)键值存储系统的混合索引机制研究键值存储系统通常采用LSM-tree和哈希表作为其索引结构,然而,不同索引结构往往存在不同的性能权衡。例如,哈希索引可以提供快速的点查询,但不支持范围查询且内存开销大,只适用于小规模的数据存储;LSM-tree可提供快速的写入和范围查询,但多层存储架构导致严重的读写放大。所以,单一的索引结构难以满足高性能的读写需求。另一方面,实际工作负载往往存在访问热点问题,即少量热数据被频繁访问。基于上述观察,为了解决键值系统中单一索引结构面临的问题,我们研究提出了一个基于混合索引架构的键值存储系统UniKV,它将哈希索引和LSM-tree的关键设计思想统一在一个系统中。首先,将数据分为热数据和冷数据两层,为少量热数据在内存构建哈希索引,以加速对热数据的访问;冷数据采用单层LSM-tree,以保证良好的可扩展性和范围查询性能。此外,提出了基于部分KV分离的高效合并策略,基于键值范围的动态分区策略,分区间的并行优化方案等多种优化技术,以提升系统的整体性能。最后,我们基于开源系统LevelDB实现了原型系统UniKV,实验结果表明,在读写混合的工作负载下,UniKV可以将系统吞吐量提升到已有键值存储系统的2.0-7.1倍。(2)分布式键值存储系统的多副本容错管理研究为了保证数据的高可靠并提供数据容错,多副本容错机制被广泛应用在分布式键值存储系统中。然而,现有多副本管理方案并未考虑LSM-tree架构的读写放大问题,在每个节点上简单地采用一个LSM-tree对所有副本(主副本和冗余副本)进行统一存储。因此,多副本机制下LSM-tree中存储的数据量会成倍增长,从而进一步加剧LSM-tree的读写放大问题。为了解决上述问题,我们研究提出了一个基于副本解耦的高性能分布式键值存储系统DEPART。首先,通过哈希计算并结合一致性哈希环来对副本数据进行解耦,使得副本解耦操作是轻量级的。然后,对解耦出的主副本和冗余副本进行差异化存储:对于主副本,仍采用LSM-tree进行存储,但更加轻量级,从而保证主副本可以同时获得较好的读写和范围查询性能;对于冗余副本,研究提出了一个两层日志架构,首先将所有冗余副本批量追加到第一层全局日志,之后使用后台线程将其分割到第二层的多个本地日志中,以保证高效的冗余副本写入性能,并且本地日志中细粒度的数据管理也能保证良好的冗余副本读性能。此外,我们为两层日志架构设计了有序度可调机制,通过一个参数将两层日志调整为有利于写或者利于读,从而用户可通过调整两层日志的有序度来获得想要的性能提升。最后,设计了并行的数据恢复机制,以加速数据恢复操作。我们基于Cassandra实现了原型系统DEPART,实验结果表明,DEPART可将Cassandra的读写吞吐量分别提升2.5倍和1.4倍,并将数据恢复时间减少一半左右。(3)属性感知的异构内存键值存储系统研究数据的属性特征普遍存在,且利用数据属性进行数据挖掘和分析,具有重大研究价值。然而,现有键值存储系统在存储层不能感知数据的属性特征,将所有属性值以字节串的形式追加存储在KV数据中。当应用需要对数据属性值进行分析处理时,需要首先读取出整个KV数据,然后再解析出指定的属性值,导致大量无效的磁盘读写。为了解决上述问题,我们研究提出了一个属性感知的异构内存键值存储系统SchemaKV。首先,研究提出一个基于DRAM/NVM异构内存的存储架构:将所有数据存储在NVM中,以提供大容量和持久化;将少量热数据缓存在DRAM,以提供低延迟的访存性能。其次,设计了一个属性感知且基于页面的缓存架构,以保证低元数据开销,高缓存命中率。并且,我们设计了数据异步缓存框架,以及模式感知的选择性缓存策略,以减轻数据缓存操作对系统性能的影响,并充分利用缓存空间来提升性能。此外,设计了缓存亲和的空槽选择策略,使得在缓存数据时内存地址相邻的数据尽量是有序的,以提高CPU缓存命中率。最后,设计了轻量级的缓存逐出策略,使得缓存有足够的空间来缓存新数据。我们基于乔戈里开源平台实现了原型系统SchemaKV,实验结果表明,SchemaKV可以有效支持对数据属性值的访存,并能提供低延迟的访存性能。