论文部分内容阅读
基于日志结构合并树(Log-Structured Merge-Tree, LSM-tree)[1]思想实现的分布式数据库,采用读写分离、批量更新的存储架构管理数据。它能够有效地解决高负载的集中写入问题,并实现海量数据的可扩展存储。但这类架构的数据库在数据访问支持上还存在不足,其中不支持高性能的非主键查询是主要问题之一。索引是传统的提高非主键查询性能的技术。当下,对于读写分离架构的数据库,创建二级索引主要挑战是,数据更新增量全部存储在内存中并动态更新,而磁盘又存储了大量的基线数据。分布式环境下如何实现统一而高效地基于这两部分数据的索引构建,并能够支持数据的动态更新,保证索引与数据的一致性,是本文所要面对的问题。本文针对这样的问题,提出一种面向读写分离存储架构的索引方法,实现对海量数据的高效索引构建,同时使索引适应于系统的负载均衡和可扩展性。本文工作的主要贡献如下:1.解决了读写分离架构下对海量数据高效索引构建的问题。设计了适用于分布式系统的底层存储结构,保证在动态更新状态下的索引正确性;设计了索引延迟生效机制,实现不阻塞事务的索引构建,提高数据库的可用性;设计了基于采样的两阶段排序和多线程并行调度算法,加快基线数据的索引创建。2.提出了读写分离架构下索引高效维护和查询优化策略。设计了该架构下索引的维护和查询算法,并使用移除索引恢复日志的方法优化索引的维护,以及通过冗余列避免回表查询的额外开销优化索引的查询处理。3.验证了在典型架构的数据库中本文所有方法的有效性和正确性。本文的索引方法在开源数据库OceanBase[2]实现,并开展充足的实验。用大量模拟实验评测各种性能指标。并且,该索引技术已经在某银行的UAT[3]环境中用真实业务场景测试。两种评测都充分证明了本文方法的有效性和正确性。