2012-06-16 3 views
1

На веб-сайте, который я создаю, есть «События». События имеют название, дату и идентификаторы пользователей. Событие может быть чем-то из следующего за кем-то, созданием нового сообщения и т. Д. Я думал хранить все события в одной таблице, но я видел, что это очень быстро.Возможные проблемы с производительностью с огромной таблицей PostgreSQL

Я делаю это правильно? Когда мне нужно искать в таблице, скажем, событие, относящееся к определенному пользователю, насколько плохим будет то, что будет в системе? Могу ли я его каким-то образом оптимизировать?

ответ

1

Вы должны добавить указатели на столбцы, которые наиболее часто используются в предложениях WHERE, например. если вы часто выбираете все события, относящиеся к определенному пользователю, вы должны создать индекс в столбце user_id.

http://www.postgresql.org/docs/9.1/static/sql-createindex.html

+1

Возможно, это не очень хорошая идея. Если в таблице много записей (и похоже, что это так), то добавление индекса может фактически замедлить общую систему! – Oleksi

0

Пока данные в этой таблице normalized, вы должны быть в порядке. Если вы обнаружите, что запросы на чтение в этой таблице замедляются, вы можете добавить индекс к некоторым столбцам, но вы должны иметь в виду, что это замедлит запись в эту таблицу.

Если вы обнаружите, что производительность слишком низкая, вы можете переключиться на использование базы данных NoSQL, которая лучше оптимизирована для больших таблиц.

+0

Вы могли бы дать мне представление о размере таблицы, которая начнет показывать проблемы с производительностью при чтении/записи? Мы говорим о сотнях, тысячах, сотнях тысяч записей, чтобы увидеть отставание? – n0pe

+1

Трудно сказать, не делая никаких измерений в вашей конкретной базе данных и запросах, которые вы делаете, но я бы оценил сотни тысяч. – Oleksi

Смежные вопросы