Лучший способ сделать это действительно зависит от качества и характера ваших данных и запросов. Для начала, 180 МБ данных в одной таблице для продуктов - не проблема, как бы вы к ней ни относились. А 30 тыс. Запросов в день - это еще меньше проблем. С правильно настроенной базой данных любой старый рабочий стол может справиться с этой нагрузкой.
Другие уже указали два основных варианта: MySQL или база данных noSQL.
Если у вас есть определенное количество атрибутов, которые существуют для каждого отдельного продукта (например, производитель, цена, номер склада и т. Д.), Тогда лучше всего иметь столбцы для этих атрибутов и преобразовать пары ключ / значение в формат плоской таблицы, с идентификатором продукта в качестве первичного ключа для этой таблицы. Это будет работать очень хорошо, даже если некоторые столбцы используются только половиной строк, поскольку для большинства продуктов вам потребуется всего лишь выполнить 1 запрос, чтобы получить все их атрибуты. это данные о продуктах, я думаю, вполне вероятно, что это структура ваших данных.
Если атрибуты сильно различаются по наличию и типу данных, то вам лучше использовать базу данных noSQL, которая обрабатывает этот сценарий более эффективно, чем традиционные базы данных SQL.
Что касается производительности: ранее я работал в компании, занимающейся электронной коммерцией, где долгое время веб-сайт получал данные с сервера MySQL. Этот сервер имел 2 ГБ оперативной памяти, общая база данных была ок. Сервер размером 5 ГБ и при максимальной загрузке сервер обрабатывает несколько тысяч запросов в секунду. Да, мы провели большую оптимизацию запросов, но это определенно выполнимо.