Mongodb 的索引架构

来源:互联网 发布:东方有线网络 编辑:程序博客网 时间:2024/05/18 03:00

索引在任何的数据库里面都起着至关重要的作用, 在mongoDB里面, 基本的增删改查操作都需要访问索引, 通过一个集合的名字, 如何找到相关的索引, 并且对其进行操作哪?

如下, 是Mongodb Index的整体架构:
这里写图片描述

collection类

对于任何一个存在的集合的明仔, 我们通过catalog 找到一个它对应的Collection对象, 该对象会保存这
个集合的所有的索引的信息IndexCatalog类型对象 _indexCatalog;

IndexCatalog类

IndexCatalog类包含了查找index, 遍历(IndexIterator), 创建删除, 更新(refreshEntry)index的基本的操作;或者说, 这个函数是Index的接口, 所有的对index的操作都要经过这个类, 再由这个类通过复合的方式调用其他的类去完成;
每一个Collection可能有多个index,每一个代表一个IndexCatalogEntry对象, 他们由类IndexCatalogEntryContainer 负责管理。 IndexCatalogEntryContainer 类实际上是一个vector 对象的IndexCatalogEntry, 提供了集合的封装。

IndexCatalogEntry类

该类主要包含IndexDescription ,IndexAccessMethod以及SetHeadChange, 可以记录每一个index的基本属性, 增删改查的方法以及索引的变化。这个class本身相当于一个代理类有上述的3个sub-class来完成相应的功能。

IndexDescriptor 类

该类主要保存index的基本属性, 他是一个computed属性保存的类, 把某个index的一些属性保存在该类的对象里面, 比较类似于index 的specific data 或者元数据。

IndexAccessMethod 类

是关于index的增删改查等操作的基类, 针对不同的场景, 有相关的子类来实现特定的功能, 具体可以参考上面的架构图。
另外, IndexAccessMethod类, 也是一个代理类, 具体的增删改查的操作, 由存储引擎的索引的基类SortedDataInterface来完成。

SortedDataInterface 类

Mongodb可以支持多种类型的存储引擎, 比如MMapV1, WiredTiger等, 不同的存储引擎对于索引有不同的实现方式。 所以SortedDataInterface 存储引擎的基类, 具体的实现, 有具体的存储引擎的子类负责, 例如, WiredTiger类型的存储引擎的索引为WiredTigerIndex。

原创粉丝点击