本文摘录自王珊和萨师煊编著的《数据库系统概论(第5版)》第15章,主要梳理内存数据库设计中的几个关键问题。
1. 什么是内存数据库?
内存数据库是将内存作为主存储设备的数据库系统,也称为主存数据库和In-Memory DataBase。与之相对的是磁盘数据库,使用磁盘作为常规数据存储设备,仅使用内存作为工作数据缓冲区。两者在数据组织、存储访问模型和查询处理模型三个方面的优化方式不同,前者针对内存特性进行优化设计,后者则面向磁盘访问特性,查询优化核心是减少磁盘的输入/输出。
2. 内存数据库与将数据全部缓存到内存的磁盘数据库相比有什么优势?
在内存数据库中,使用针对内存特性进行优化的存储结构、索引结构和操作算法进一步优化了内存数据库的性能,因此与数据全部缓存到内存的磁盘数据库相比,内存数据库的性能仍然高出数倍。
3. 内存数据库有哪些特性?
(1)高吞吐率和低访问延迟:数据能被处理器直接访问,使得内存数据库具有较高的事务吞吐率和较低的查询处理延迟,能够支持高实时响应的应用需求。
(2)并行处理能力:内存具有良好的并行数据访问能力和随机访问性能,使得内存数据库的查询处理技术可以充分利用并行计算的能力。
(3)硬件相关性:内存数据库的性能受硬件特性的直接影响,主要包括多核处理器、众核协处理器、通用GPU、PCM存储、固态硬盘等,内存数据库的设计应该充分考虑并有效利用由新硬件技术带来的功能扩展和性能提高。
4. 内存数据库有哪些关键技术?
通用的内存数据库管理系统要为用户提供SQL接口,具有内存存储管理、面向内存的查询处理和优化等基本模块,还应提供多用户的并发控制、事务管理和访问控制,能够保证数据库的完整性和安全性,在内存数据库出现故障时能够对系统进行恢复。
5. 数据库中有哪些数据存储方式?内存数据库更适合采用哪些方式?
数据库的数据存储一般有行存储模型、列存储模型和混合模型等。行存储模型中元组是连续存放的,对于涉及多个属性的操作能够保证产生最小的内存访问,而对于只涉及较少属性的操作,由于其他属性也会被加载到缓存中,因而缓存利用率相对较低。列存储模型将关系按列进行垂直划分,相同属性的数据连续存储,具有较高的数据访问局部性,能够更好地对数据进行压缩以减少内存带宽消耗,但如果查询所需要地属性较多,尤其是需要重构元组时,则需要连续多个划分来满足查询要求,则会导致性能下降。混合存储模型有PAX存储和属性组存储,其基本思路是保证同一元组的所有属性存在一页中,同时对一页中所有的元组进行列存储。
内存数据库系统既有联机事务处理(OLTP)更新密集型应用,也有联机分析处理(OLAP)复杂分析型应用,因此行存储和列存储被不同的内存数据库系统所采用。通常事务型内存数据库采用的是行存储模型,分析型内存数据库采用的是列存储模型。
6. 决定内存数据库查询处理性能的因素有哪些?
(1)内存数据访问性能:由内存带宽和内存访问延迟决定。与CPU性能的增长速度相比,内存访问延迟成为内存数据库的性能瓶颈(内存访问需要上百个CPU时钟周期的访问延迟)。内存数据库查询优化的关键技术是通过现代CPU的多级缓存结构(L1、L2、L3 cache)减少内存数据访问延迟,提高数据访问性能。
(2)内存数据处理性能:主要受处理器性能影响。更多的处理核数提高了多核CPU的并行计算能力,需要将内存数据库的查询处理技术全面升级为多核CPU并行查询处理技术,并根据多核CPU的硬件特性进行算法优化,提高内存数据库整体性能。
7. 内存数据库查询优化的重点包括哪几个方面?
(1)cache缓存技术以提高数据访问性能:多核CPU中的多级cache机制,每个核拥有一个L1数据cache,一个L1指令cache,一个L2 cache和一个共享L3 cache,还有一个最后一级cache(Last Level Cache,LLC)。若CPU需要的数据不在cache中,会导致cache失效,CPU需要进一步从内存中读取数据。cache失效可以分为强制失效、容量失效和冲突失效。cache性能优化算法是一类通过提高cache数据的空间局部性和时间局部性,从而减少cache失效、优化cache性能的算法。在数据访问方面的cache优化技术主要包括cache-conscious优化技术、cache-oblivious优化技术、page-coloring优化技术、cache敏感性数据结构等。数据库领域内cache优化技术主要通过对数据在内存中的存储布局、访问模式、数据结构等方面的优化来提高查询处理过程中数据的cache命中率。
(2)并行查询处理技术以提高数据处理性能:包括面向多核的查询处理技术和面向众核的查询处理技术。在多核平台上,查询算法需要改写为多核并行算法。在多核并行优化时需要解决的关键技术包括并行处理时的共享cache优化,数据分区优化等技术。多核并行优化更多地采用分区并行处理技术,包括基于位置划分的分区技术和基于hash划分的分区技术等。当前内存数据库主要采用的三种多核并行hash连接技术包括无分区hash连接算法、基于分区的hash连接算法、radix hash连接算法。在众核平台中,查询算法需要进化为高可扩展并行算法,以充分利用现金众核处理器提供的强大并行计算性能。
(3)索引技术以提高查询性能:内存数据库中广泛采用的索引包括AVL树、B+树、T树、CSB+树、CST树等。
(4)执行时编译: 动态编译的就是CPU用到哪一块,再到内存中提取,如果内存中没有就去硬盘上找 。
8. 内存数据库的并发控制有什么特别之处?
由于数据存储在内存中,内存数据库中事务执行时间一般较短,因此持锁时间也较短,系统中冲突较少。可以采用以下方法减少锁的开销:采用较大的封锁粒度(如表级锁),采用乐观加锁方式,减少锁的类型,将锁信息存储在数据本身。
封锁产生的CPU代价会对OLTP应用下的查询处理性能产生严重影响,因此事务型内存数据库的主要研究问题是在保证事务ACID特性的同时,尽量减少并发控制对性能的影响。
分析型内存数据库并发控制的目标是减少多个查询对cache的并发访问冲突,提高内存数据库的吞吐性能。
9. 内存数据库的恢复机制关注哪些研究问题?
内存具有脆弱性和易失性,内存数据库数据需要在磁盘等非易失性存储介质中进行备份,并且在对数据更新时将日志写到非易失性存储介质中。
将日志写在何处以及何时将日志写入磁盘而不会因为写日志所产生的磁盘I/O延长事务的处理时间,这在内存数据库中是一个非常重要的问题。
发生系统崩溃时,如何从备份和日志中恢复数据也是一个值得研究的问题。
网友评论