Я работаю над проектом, в котором я буду хранить каждый клик по определенному списку предметов.После некоторого исследования у меня возникли сомнения относительно того, каким было бы самое разумное решение.
Моя система построена на базе данных PostgreSQL, и, насколько я знаю, я храню клики следующим образом:
id itemId userId ipAdress date
1 3 1 xx.xx.xx 01/01-2018
2 1 1 xx.xx.xx 01/01-2018
3 2 NULL xx.xx.xx 01/01-2018
4 2 NULL xx.xx.xx 01/01-2018
5 1 2 xx.xx.xx 01/01-2018
Мой список товаров должен быть отсортирован по большинству кликов.Поэтому запрос может выглядеть примерно так, чтобы отсортировать элементы по щелчкам:
select i1.*, count(i1.id) as totalClicks from itemClicks ic1
left join items i1
on i1.id = ic1.itemId
group by ic1.itemId
order by totalClicks desc
Так что это работает нормально - по крайней мере, без огромного набора данных.Но в какой-то момент в наборе данных может быть много миллионов строк. В соответствии с этой статьей researchgate.net SQL-сервер намного быстрее выполняет агрегацию, поэтому я думаю, что продолжать хранить данные на SQL-сервере имеет смысл.Причина, по которой я перешел на PostgreSQL (для ознакомления), заключается в том, что нет максимального размера базы данных, и это хорошо для больших баз данных, насколько я понимаю.
Мне удобно работать с MySQL (MariaDB), PostgreSQLи MongoDB в этом отношении.Что наиболее важно, это то, что я храню данные с самого начала, не заканчивая медленной системой.И база данных должна быть предпочтительно с открытым исходным кодом.
Я надеюсь, что кто-нибудь может дать мне некоторую обратную связь и сказать мне, если я на правильном пути или нет.
crellee