Answer the question
In order to leave comments, you need to log in
How to make a selection of goods by 100 parameters (EAV)?
Добрый день.
Дано: база товаров на 2 млн. строк.
Структура базы EAV
В таблице зависимостей названий характеристик и значений порядка 15 млн строк.
Задача - возможность все это как-то фильтровать, причем убирая заведомо тупиковые варианты в disable.
Делать сотни Select and and and - понимаю, что глупо, запихнуть все это в sphinx?
Может быть, просчитывать варианты заранее?
На хабре нашел такую вот статью https://habrahabr.ru/post/114113/ но из нее, к сожалению, особо ничего так и не понял.
Кто-нибудь сможет пояснить (разжевать)? либо подсказать еще варианты реализации задачи.
Спасибо.
Answer the question
In order to leave comments, you need to log in
Не думаю, что эта статья решит все Ваши вопросы, но что бы понять ее надо вначале покурить тут:
http://ruhighload.com/post/Работа+с+индексами+в+MySQL
и тут:
https://habrahabr.ru/post/70640/
Раз вам нужно убирать неподходящее в disable, то на реляционной базе, да еще с EAV - это будет ад, как по коду, так и по производительности.
Самое очевидное решение тут брать подходящие для этих задач решения, например, elasticsearch. Вот, например, статья про такой вариант https://blog.madewithlove.be/post/faceted-search-u...
Предлагается использовать битовые поля.
В один INTEGER ты упакуешь 32 BOOL. Это уже даст больше пользы, чем индексация.
INTEGER должен быть быстрее BIGINT. То есть будет несколько полей (4), вместо 100 с лишним.
Хранение набора чекбоксов в одном поле БД. Битовая...
На мой взгляд, ускорение поиска нужно делать через денормализацию: или собирать индекс в отдельную таблицу или делать индекс чрез sphinx\elasticsearch. Обновлять индекс по крону или программно (при сохранении модели, к примеру)
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question