pandaa
@pandaa

Как инвертированный индекс хранит несколько значений в одном поле?

5ef99055c5605083834316.jpeg
Эта структура не выглядит нормализированной, однако она используется в поисковых индексах, почему? Какой тип данных использует поле documents?
  • Вопрос задан
  • 132 просмотра
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В инвертированном индексе поиск идёт по полю Word, а не Document. А в одно поле Word записано только одно значение.
Ответ написан
ayazer
@ayazer
Sr. Software Engineer
С одной стороны - да, не нормализирована и вообще - классический антипаттерн проектирования, когда в одно поле пихают значения через запятую.

С другой - надо посмотреть на предметную область и подумать - а дейстительно ли есть есть смысл в разделении? На вид конкретно в данном случае - майскл используется как key-value хранилище, которое быстро достает список документов и отдает его наружу. Дальше сервис уже сделает сплит по запятой и пойдет доставать документы куда-то с хранилища/пойдет куда-то в солр/еластик чтоб уточнить информацию по каждому конкретному документу. Т.е. в случае если нам всегда нужен весь список документов - мы имеем ситуацию когда от разделения мы только теряем (т.к. больше таблиц, больше джойнов, сложнее структура, больше цпу/рам тратится чтоб все достать/хуже кеш хит => мы можем выдержать меньшую нагрузку).

Нужно четко различать где денормализация т.к. так нужно, а где - т.к. нехватка времени/знаний/желания. И да, этот пример скорее для демонстрации идеи. В реальном мире может оказаться что по ключу "key1" будет лежать строка в пару гигабайт, потому настолько наивный подход работать не будет.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы