1. 创建
除了用户手动创建索引,系统会为每个Collection建立一个主键索引,下面分析的就是这个主键索引的创建过程。
原来我们说到Collection的创建是在Database的createCollection中开始。
进入_getOrCreateCollectionInstance方法,确实有Collection的创建语句。
那么Collection的构造函数又干了些什么?从下图可以看到,Collection的构造过程中,确实做了一些与索引相关的工作,但还不知道究竟做了些什么。我们继续向下走。
进入init函数,其实并不是每一句都弄清楚了,但是看到_setupInMemoryStructures这个函数就吸引了我。
进入setupInMemoryStructures函数终于发现了看到了关于获取index的函数,追踪发现getIndex函数确实就是创建Index的方法。经过这一系列步骤,索引结构就确定了。
2. 插入数据建立索引
前面我们说过Collection中是如何插入数据的,同样是在_insertDocuments方法中,我们最后有一段没有分析,如下图所示代码,首先获得record的id,然后构造成一个bsonRecord,这个BsonRecord包含两项,一个Id,一个指向Record的指针,这样就构造了Index的一项,最后将这个索引节点插入。