Хранить клики как большие данные - PullRequest
0 голосов
/ 27 сентября 2018

Я работаю над проектом, в котором я буду хранить каждый клик по определенному списку предметов.После некоторого исследования у меня возникли сомнения относительно того, каким было бы самое разумное решение.

Моя система построена на базе данных 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

1 Ответ

0 голосов
/ 27 сентября 2018

Если таблицы большие, этот запрос будет сильно отстой.

Это не недостаток PostgreSQL или какой-либо другой системы управления базами данных, а следствие того, что сортировка данных требует затратиз O(n × ln(n)).

Выходом из этого является предварительная агрегация данных:

При каждом клике вы обновляете таблицу, в которой подсчитывается количество кликов на элемент.Это дешево, и вы можете получить свой результат мгновенно.Триггер базы данных - это путь!

Этот метод называется материализованным представлением .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...