Разрабатываю доску объявлений, и столкнулся с таким вопросом, как лучше всего хранить данные об объявлениях.
У меня имеется несколько таблиц
post - основная информация
img_post - ссылки на картинки объявлений
post-attr - названия атрибутов, и тип
post_attr_value - значения атрибутов, связываю с таблицей атрибутов и постом
При добавлении объявления, под каждое создаю файл с json массивом, чтобы тянуть с него информацию, а не миллион запросов делать в базу при открытии страницы объявления. (файлы раскладываю /region/city/marka/model/id_ads.json)
Так вот вопрос, не ляжет ли эта доска, если наберется порядка 100к объявлений?
Допустим зайдет 1000 человек, и будут юзать фильтры, а это все запросы в базу (в 3 таблиц одновременно), не будет ли перегрузки?
Или может есть какие-то методы построения sql запросов, чтобы не грузить сильно базу?
Интересно очень, как работает система на дроме, олх, авито и т.д.
MySQL очень много чего может выдержать, храните смело, все базе, кроме картинок конечно.
Преждевременная оптимизация зло.
База, если настроена все нормально, работает быстрее, чем читать данные из файла, особенно если в файле будет 100к объявлений... Чаще всего стартовая страница уже лежит в памяти и запросы закешированы..
Главное правильно спланировать базу, создать нужные таблицы, индексы и настроить кеширование например Redis.
По ищи на ютубе "avito базы данных" вот тут про базы в авито: https://www.youtube.com/watch?v=M-KF7cFWaVE&ab_cha... в Авито не все так просто с базами ) тебе точно не стоит об этом переживать на старте. Перепишешь если взлетишь как авито.
Один знакомый мне говорил, решать проблемы по мере их поступления.
И вот я его послушал.
Через месяц хост ручкой помахал, и временно приостановил работу сайта, так как много запросов было к базе (чат на ajax с обновлением в 1с. ).
Заказчик чуть в обморок не упал (потом пришлось учить socket), по этому впредь стараюсь делать более менее надежно.
Предположим, что доску объявлений смотрит много людей и они видят те же объявления. Разве не напрашивается вывод о необходимости кеширования объявлений? Каждый фильтр - это свой набор объявлений. И если часто запрашиваемый, то он практически регулярно будет в кеше.
Решение с файлами плохо масштабируется и вместо этого используйте СУБД. Возьмите Mysql 8+ или Postgresql (кажется с 9) с поддержкой JSON. Добавьте индексы на нужные поля.
Строить таблицы нужно так, чтобы было меньше JOIN, то есть частично денормализовать данные, если расчитано на частые запросы.