Единого формата NoSQL нет: он зависит от модели БД и протокола. Документные системы, key-value, wide-column и графовые базы представляют данные по-разному.
Уточните, что было источником истины и какой слой ускорял чтение: Redis, память приложения, отдельная таблица или materialized view. Наличие кешей внутри СУБД не означает, что сама БД служила кешем.
В декораторе ошибочны wrap, time.now и return в finally. Нужно functools.wraps, монотонный таймер и логирование без подмены результата; декоратор должен быть определён до применения.
Результат зависит от типа management: обычное поле добавит столбец, ForeignKey — внешний ключ, ManyToManyField обычно создаст связующую таблицу. Одного имени поля для точного ответа недостаточно.
Начните с конкретного медленного запроса и измерений, затем изучите план, фактические строки, чтение буферов и ожидания. Меняйте только выявленное узкое место и сравнивайте результат.
Обычно основная БД — источник истины, а Redis хранит восстанавливаемые копии. После commit изменения кеш инвалидируют или обновляют, учитывая гонки, повторы событий и допустимую устарелость.
Старая версия падает, если миграция уже удалила или переименовала используемый ею столбец. Откат кода не откатывает совместимость схемы; применяют expand–migrate–contract.
Index bloat — избыточный размер индекса из-за устаревших записей и неэффективно заполненных страниц. MVCC откладывает удаление старых версий; частые изменения и задержанная очистка усугубляют рост.
Сверьте каждую цель с Makefile и фактической конфигурацией. Комментарий к migrate нельзя считать доказательством запуска тестов: название и описание противоречат друг другу.
Базовая схема — adjacency list с parent_id и сохранённой глубиной depth. Индекс по depth позволяет быстро выбирать один уровень, но перенос поддерева требует обновить глубины потомков.
Для AND подходит составной B-tree индекс по имени и фамилии. Для OR обычно нужны индексы с каждым из полей первым; один (lastName, firstName) не гарантирует быстрый поиск по одному firstName.
Векторный поиск не гарантирует точные фильтры, суммы, JOIN и актуальное транзакционное состояние. Для числовых ответов по SQL-базе основой должны быть проверяемые запросы к данным.