Как уменьшить запрос к моей БД? - PullRequest
0 голосов
/ 14 февраля 2011

У меня есть БД, в которой хранится много сообщений, например, блог.Проблема в том, что существует много пользователей, и эти пользователи создают много постов одновременно.Таким образом, когда пользователь запрашивает домашнюю страницу, я запрашиваю эти сообщения в БД.Короче говоря, я должен получить сообщения, которые я показал, для показа новых. Как мне избежать этой проблемы с производительностью?

Ответы [ 4 ]

0 голосов
/ 14 февраля 2011

Прежде чем идти по пути кеширования, убедитесь, что

  1. Просмотрите логику (выполняете ли вы ненужные шаги, можете ли вы заполнить некоторые переменные памяти медленно меняющимися данными и таким образом уменьшить количество вызовов БД и т. Д.)
  2. Убедитесь, что операции с БД настолько различны, насколько это возможно (минимальное количество возвращаемых строк и столбцов)
  3. Данные нормализуются как минимум до 3-й нормальной формы и , затем выборочно денормализуется с помощью соответствующих процедур обработки данных для денормализованных данных.
  4. После нормализации настройте экземпляр БД (производительность сервера, дисковый ввод-вывод, память и т. Д.)
  5. Настройка операторов SQL

Тогда ...

  1. Рассмотрим кеширование. Несмотря на то, что невозможно кэшировать все данные, если вы можете получить значительный процент в кеше в течение разумного периода времени (и эти значения варьируются в зависимости от сайта), вы снимаете нагрузку с сервера БД и, таким образом, другие запросы могут обслуживаться быстрее .
0 голосов
/ 14 февраля 2011

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

0 голосов
/ 14 февраля 2011

Если есть данные, которые запрашиваются очень часто, вам следует их кешировать.Попробуйте использовать кэш в памяти, такой как memcached , для хранения вещей, которые могут быть повторно запрошены за короткое время.Для этого у вас должна быть свободная оперативная память: попробуйте использовать свободную память на внешнем (-их) компьютере (ах), обычно обслуживая HTTP-запросы и применяя шаблоны менее интенсивно в ОЗУ.Кстати, вы можете кэшировать не только необработанные записи БД, но и готовые фрагменты страниц с форматированием и все.

Если ваша загрузка не может быть разумно обработана одной машиной, попробуйте sharding вашей базы данных .Поместите данные некоторых ваших пользователей (сообщения, комментарии и т. Д.) На один компьютер, данные других пользователей на другой компьютер и т. Д. Это сделает невозможным некоторые объединения на уровне базы данных, поскольку данные находятся на разных компьютерах, но объединения выполняются вами.часто будет распараллеливаться.

Кроме того, взгляните на ориентированные на документы хранилища данных «NoSQL», такие как (MongoDB) [http://www.mongodb.org/]. Это, например, позволяет хранить пост и все комментарии к нему в одной записии получить за одну операцию, без каких-либо соединений.Но регулярные объединения практически невозможны.Вероятно, сочетание хранилища SQL и NoSQL является наиболее эффективным (и сложным в обращении).

0 голосов
/ 14 февраля 2011

вы делаете какой-либо тип нумерации страниц?если нет, то лучше всего разбивать на страницы базы данных ... начните с первых 10 сообщений, а после этого верните только полный список запросов пользователей по ссылке или другим данным.

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