Anatomía de un Shard de Lucene: Finite State Transducers (FST), Postings Lists y Segment Merging (50 min)
Anatomía de un Shard de Lucene: Finite State Transducers (FST), Postings Lists y Segment Merging
1. Cada Shard de Elasticsearch es una Instancia Independiente de Apache Lucene
Un índice en Elasticsearch/OpenSearch se particiona en Shards, y cada Shard es un directorio de Segmentos Inmutables de Apache Lucene. Dentro de cada segmento conviven cuatro estructuras físicas especializadas:
1. Term Index (.tip - Finite State Transducer en RAM): Autómata determinista minimal que comprime prefijos y sufijos compartidos del diccionario de términos para localizar el offset en disco de cualquier palabra en $\mathcal{O}(\text{len}(\text{term}))$.
2. Postings Lists (.doc, .pay, .pos - Índice Invertido): Lista ordenada de DocIDs comprimida mediante Frame-of-Reference (FOR) Delta Encoding y Roaring Bitmaps para intersecciones SIMD ultrarrápidas.
3. Doc Values (.dvd - Almacenamiento Columnar en Disco): Estructura columnar orientada por documento (DocID -> Valor) mapeada vía mmap en el Page Cache del kernel para ejecutar ordenamientos (sort) y agregaciones (terms, percentiles) sin llenar el Heap de la JVM.
4. BKD Trees (.kdd - Block K-D Trees): Índices espaciales multidimensionales para rangos numéricos, fechas y coordenadas geográficas.