Стоит вопрос про выбор базы данных для большого каталога товаров: 50 млн. товаров; 30 000 категорий. В каждой категории 3-15 фильтров по характеристикам товара. Особенность каталога: - многоязычность - каждый товар привязан к определенной GEO зоне (выделенной на карте) и показывается только если клиент находиться в этой зоне - динамическое ценообразование от различных каналов и факторов Нужно быстродействие, удобство и отказоустойчивость. Что посоветуете, какую базу данных выбрать? Вероятно какую-то связку баз данных? Как бы Вы для себя сделали такой проект?
MySQL подойдёт, главное схему и настройки правильно сделать. sphinx для поиска, ещё можно протестировать Elasticsearch
Параметрический поиск - субд+кэш. Очень быстрый параметрический поиск - субд по таблице хешей. Самый быстрый параметрический поиск - поиск по ключам хешей лежащих в памяти (memcache/redis). Полнотекстовый поиск - любая любимая тулза для этого предназначенная. Всё решается на любой удобной вам субд. Для скорости работы, если критична нагрузка и время ответа, задействовать memcache и хранилище типа ключ-значение.
Да всё просто: всякие признаки и свойства товара могут содержаться в десятке связанных таблиц. Генерируется одно значение на основе значений всех этих свойств и заносится в индексное поле. Как результат: когда производим типичный параметрический поиск, ищем только по одному полю без всяких многотабличных запросов и вложенных условий. Есть оверхед на перезапись хеша при изменении параметров товара, но он нивелируется выигрышем в скорости поиска.
upd. Реализовать можно, но, имхо, это не совсем типичная задача искать по "ИЛИ" в товарном каталоге. И отличаться она в данном случае будет только тем, что искать будем по N хешам (в количестве вариантов). И даже в таком реализации поиска с большой долей вероятности можно предположить, что поиск по 2-10 хешам по индексу одной единственной таблицы будет быстрее выборки из результатов нескольких joinов с несколькими условиями для on (что типично). Оверхед, разумеется, нужно просчитывать прежде чем городить огород (ибо структура данных каталога может быть проще).