github.com/m3db/m3@v1.5.0/src/m3ninx/index/segment/fst/README.md (about)

     1  FS Segment
     2  ===========
     3  
     4  - Version 1.1: Adds support for a metadata proto object per Field. This is used to
     5  store an additional postings offset per Field to a PostingsList comprising the union
     6  of all known PostingsList across all known Terms per Field.
     7  
     8  ```
     9  ┌───────────────────────────────┐            ┌──────────────────────────────────────┐
    10  │ FST Fields File               │            │ FST Terms File                       │
    11  │-------------------------------│            │--------------------------------------│
    12  │- Vellum V1 Format             │            │`n` records, each:                    │
    13  │- []byte -> FST Terms Offset   ├─────┐      │  - metadata proto (`md-size` bytes)  │
    14  └───────────────────────────────┘     │      │  - md-size (int64)                   │
    15                                        │      │  - fst payload (`fst size` bytes)    │
    16                                        │      │  - fst size (int64)                  │
    17                                        └─────▶│  - magic number (int64)              │
    18                                               │                                      │
    19                                               │Payload:                              │
    20                                               │(1) Vellum V1 FST                     ├─┐
    21                                               │[]byte -> Postings Offset             │ │
    22                                               │                                      │ │
    23                                               │(2) Metadata Proto Bytes              │ │
    24                                               │Field Postings Offset                 │ │
    25                                               └──────────────────────────────────────┘ │
    26                                                     ┌───────────────────────────────┐  │
    27                                                     │ Postings Data File            │  │
    28                                                     │-------------------------------│  │
    29                                                     │`n` records, each:             │  │
    30                                                     │  - payload (`size` bytes)     │  │
    31                                                     │  - size (int64)               │  │
    32                                                     │  - magic number (int64)       │◀─┘
    33                                                     │                               │
    34                                                     │Payload:                       │
    35                                                     │- Pilosa Bitset                ├──┐
    36              ┌───────────────────────────┐          │- List of doc.ID               │  │
    37              │ Documents Data File       │          └───────────────────────────────┘  │
    38              │-------------------------  │                                             │
    39              │'n' records, each:         │                ┌─────────────────────────┐  │
    40              │  - Magic Number (int64)   │                │ Documents Index File    │  │
    41              │  - Valid (1 byte)         │                │-------------------------│  │
    42              │  - Size (int64)           │                │- Magic Number (int64)   │  │
    43              │  - Payload (`size` bytes) │                │- Num docs (int64)       │  │
    44              └───────────────────────────┘        ┌───────│- Base Doc.ID `b` (int64)│◀─┘
    45                            ▲                      │       │- Doc `b` offset (int64) │
    46                            │                      │       │- Doc `b+1` offset       │
    47                            └──────────────────────┘       │...                      │
    48                                                           │- Doc `b+n-1` offset     │
    49                                                           └─────────────────────────┘
    50  
    51  ```
    52  
    53  
    54  - Version 1.0: Initial Release.
    55  
    56  ```
    57  
    58  ┌───────────────────────────────┐           ┌───────────────────────────────┐
    59  │ FST Fields File               │           │ FST Terms File                │
    60  │-------------------------------│           │-------------------------------│
    61  │- Vellum V1 FST                │           │`n` records, each:             │
    62  │- []byte -> FST Terms Offset   │─────┐     │  - payload (`size` bytes)     │
    63  └───────────────────────────────┘     │     │  - size (int64)               │
    64                                        └────▶│  - magic number (int64)       │
    65                                              │                               │
    66                                              │Payload:                       │
    67                                              │- Vellum V1 FST                │
    68                                              │- []byte -> Postings Offset    │
    69                                              └───────────────────────────────┘
    70          ┌───────────────────────────────┐                   │
    71          │ Postings Data File            │                   │
    72          │-------------------------------│                   │
    73          │`n` records, each:             │                   │
    74          │  - payload (`size` bytes)     │                   │
    75          │  - size (int64)               │                   │
    76          │  - magic number (int64)       │◀──────────────────┘
    77          │                               │
    78          │Payload:                       │
    79          │- Pilosa Bitset                │
    80          │- List of doc.ID               │
    81          └──────────┬────────────────────┘
    82                     │
    83                     │
    84                     │
    85                     │       ┌──────────────────────────┐           ┌───────────────────────────┐
    86                     │       │ Documents Index File     │           │ Documents Data File       │
    87                     │       │--------------------------│           │-------------------------  │
    88                     │       │- Base Doc.ID `b` (uint64)│           │'n' records, each:         │
    89                     │       │- Doc `b` offset (uint64) │    ┌─────▶│  - ID (bytes)             │
    90                     │       │- Doc `b+1` offset        │    │      │  - Fields (bytes)         │
    91                     └──────▶│...                       ├────┘      └───────────────────────────┘
    92                             │- Doc `b+n-1` offset      │
    93                             └──────────────────────────┘
    94  ```