Я бы использовал PostgreSQL, потому что знаю его) А детальнее - вначале создал бы собственный тип, описывающий цену в момент времени, состоящий из времени и цены. Потом просто создал бы таблицу товаров, в которой бы была колонка с массивом этого нового типа цен в момент времени. И при каждой новой загрузке информации я бы раскладывал для подходящего товара данные о времени и цене в этот массив. Ну и добавил бы первичный ключ по товарам и gin индекс по массиву временных точек цен. По идее в таком виде таблица не станет очень большой и вы сохраните возможность быстро проводить агрегацию по данным. Ну и данные будет легко шардировать, если потребуется.