我正在研究 SAP HANA 主内存数据库。里面有索引CPBTree
。在它的文档中,它是这样描述的:
CPB+-tree 代表 Compressed Prefix B+-Tree;这种索引树类型基于 pkB-tree。CPB+-tree 是一个非常小的索引,因为它使用“部分键”,它只是索引节点中完整键的一部分。
这有点模糊。网上没有关于CPBTree结构的其他解释。
有没有人可以解释更多或介绍一个好的文件?
我正在研究 SAP HANA 主内存数据库。里面有索引CPBTree
。在它的文档中,它是这样描述的:
CPB+-tree 代表 Compressed Prefix B+-Tree;这种索引树类型基于 pkB-tree。CPB+-tree 是一个非常小的索引,因为它使用“部分键”,它只是索引节点中完整键的一部分。
这有点模糊。网上没有关于CPBTree结构的其他解释。
有没有人可以解释更多或介绍一个好的文件?
从这里开始?
B 树是经过深入研究和开发的数据结构,因此指向一个解释与此问题和 SAP HANA 相关的所有方面的单个文档有点困难。
也许它有助于首先解开这个术语:
压缩前缀
这基本上意味着,B 树索引和叶节点不包含键的完整字符串。取而代之的是,键中通用的键字符串部分(前缀)是分开存储的。叶节点和索引节点只包含
这种技术在许多 DBMS 中相当普遍,通常附加到称为“索引压缩”或类似的功能。
所以,现在我们知道 HANA 使用压缩的 B 树索引(用于行存储表和可以表示为字符串的数据)。
为什么这对于像 HANA 这样的内存数据库很重要?简而言之:RAM 和 CPU 之间的内存传输工作量。索引结构越小,它就越能适应 CPU 缓存。要遍历(通过)索引,必须执行更少的数据来回移动。
这是一个巨大的性能优势。
这与尝试最小化 RAM-CPU 数据传输的特定“缓存意识”索引协议(HANA 内核如何使用索引结构)相辅相成。
所有这些都是一个过于简化的解释,我希望它有助于更有意义。
如果您想“深入研究”并开始阅读有关该主题的学术论文,那么Sang K. Cha 教授的共享内存多处理器系统上的主内存索引的缓存意识并发控制。等人。
这与创建 P*Time 的Sang K. Cha相同,这是一个在 2000 年代初期的内存(行存储)DBMS。
这个 P*Time 已经相当有名地被 SAP 收购(就像许多其他 DBMS 软件产品公司...... Sybase...... MaxDB...... OrientDB......)并且该技术已被用作研究基地将成为 SAP HANA。
如今,只有一小部分 P*Time 仍在 SAP HANA 中,而且大部分都简化为概念和算法,并没有太多用实际的 P*Time 代码来表达。
总而言之,对于 HANA 的用户(开发人员、管理员、数据消费者)来说,这个索引实现的细节几乎不重要,因为它们都不能直接与索引结构交互。
重要的是,该索引采用现代服务器系统(许多内核、大型 CPU 缓存、大量 RAM)并从中提取出色的性能,同时仍允许“高速”事务。
我在我的博客中添加了这个答案的扩展文章: https ://lbreddemann.org/what-is-cpb-tree-in-sap-hana/ 。