A
A
Alexander2017-01-27 15:18:04
PHP
Alexander, 2017-01-27 15:18:04

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

4 answer(s)
Максим Тимофеев, 2017-01-27
@webinar Куратор тега PHP

Не думаю, что эта статья решит все Ваши вопросы, но что бы понять ее надо вначале покурить тут:
http://ruhighload.com/post/Работа+с+индексами+в+MySQL
и тут:
https://habrahabr.ru/post/70640/

D
Dmitry MiksIr, 2017-01-27
@miksir

Раз вам нужно убирать неподходящее в disable, то на реляционной базе, да еще с EAV - это будет ад, как по коду, так и по производительности.
Самое очевидное решение тут брать подходящие для этих задач решения, например, elasticsearch. Вот, например, статья про такой вариант https://blog.madewithlove.be/post/faceted-search-u...

E
Egorithm, 2017-01-27
@EgoRusMarch

Предлагается использовать битовые поля.
В один INTEGER ты упакуешь 32 BOOL. Это уже даст больше пользы, чем индексация.
INTEGER должен быть быстрее BIGINT. То есть будет несколько полей (4), вместо 100 с лишним.
Хранение набора чекбоксов в одном поле БД. Битовая...

D
Dmitriy Ronzhin, 2017-01-27
@hector

На мой взгляд, ускорение поиска нужно делать через денормализацию: или собирать индекс в отдельную таблицу или делать индекс чрез sphinx\elasticsearch. Обновлять индекс по крону или программно (при сохранении модели, к примеру)

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question