La meilleure façon de procéder dépend vraiment de la qualité et de la nature de vos données et requêtes. Pour commencer, 180 Mo de données dans une seule table pour les produits ne sont pas un problème, quelle que soit la façon dont vous le regardez. Et 30 000 requêtes par jour posent encore moins de problèmes. Avec une base de données correctement configurée, n'importe quel ancien bureau peut gérer cette charge.
D'autres ont déjà souligné vos deux options principales, MySQL ou une base de données noSQL.
Si vous disposez d'un certain nombre d'attributs pour chaque produit (fabricant, prix, numéro d'entrepôt, etc.), la meilleure option consiste à avoir des colonnes pour ces attributs et à convertir vos paires clé / valeur en format de tableau plat, avec un ID de produit comme clé primaire pour cette table. Cela fonctionnera très bien même si certaines colonnes ne sont utilisées que par la moitié des lignes, car pour la plupart des produits, vous n'aurez qu'à exécuter 1 requête pour récupérer tous leurs attributs. ce sont des données sur les produits, je suppose qu'il est fort probable que ce soit la structure de vos données.
Si les attributs varient considérablement en termes de présence et de type de données, il est préférable d'utiliser une base de données noSQL, qui gère ce scénario plus efficacement que les bases de données SQL traditionnelles.
En ce qui concerne les performances: j'ai précédemment travaillé pour une société de commerce électronique, où pendant longtemps le site Web a été fourni avec des données provenant d'un serveur MySQL. Ce serveur avait 2 Go de RAM, la base de données au total était d'env. Avec une taille de 5 Go et une charge maximale, le serveur a traité plusieurs milliers de requêtes par seconde. Oui, nous avions fait beaucoup d'optimisation des requêtes, mais c'est certainement faisable.