> Где хранится индекс и как к нему обращаются (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: Сбер

Стек: Go

> Пример ответа

Индекс в Go-приложениях обычно хранится в оперативной памяти (in-memory) для максимальной скорости доступа, но может быть персистентным - на диске или в отдельной БД (например, Redis, Elasticsearch). В контексте бэкенда на Go, если мы говорим о кастомном индексе (например, для поиска по структурам данных), его часто реализуют как map[string][]int или map[string]*TreeNode - ключ - значение для индексации, значение - список ID записей или ссылки на данные.

Пример хранения и обращения:

GO
type Index struct {
mu sync.RWMutex
store map[string][]int // слово -> ID записей
}
func (idx *Index) Add(word string, recordID int) {
idx.mu.Lock()
defer idx.mu.Unlock()
idx.store[word] = append(idx.store[word], recordID)
}
func (idx *Index) Search(word string) []int {
idx.mu.RLock()
defer idx.mu.RUnlock()
return idx.store[word]
}

Где хранится:

  • В памяти: быстрый доступ, но теряется при перезапуске (если не сохранять).

  • На диске: через сериализацию (JSON, Gob) или embedded БД (BoltDB, Badger).

  • Внешнее хранилище: Redis (для кэша), Elasticsearch (для полнотекстового поиска).

Как обращаются:

  • Через методы структуры с мьютексом для потокобезопасности.

  • Для больших данных - через хеш-таблицы, B-деревья или inverted index.

  • В Go - прямая работа с map (O(1) в среднем) или сортированные слайсы для бинарного поиска.

Выбор зависит от требований к скорости, персистентности и объёму данных.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью