Оптимизация: где обрабатывать данные? База данных, сервер или клиент?

В последнее время я много думал об оптимизации. Я разрабатываю приложение, которое заставляет меня думать, где мне следует обрабатывать данные, учитывая балансировку нагрузки на сервер, память, клиент, загрузку, скорость, размер и т. Д.

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

  • Сделайте некоторую обработку на уровне базы данных, когда я получаю данные.
  • Обработать данные на PHP
  • Передайте сырые данные клиенту и обработайте его с помощью JavaScript.

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

3

Решение

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

  1. Получить только обязательные поля из базы данных.
  2. Два простых запроса лучше, чем один сложный запрос.
  3. Получить данные из базы данных, обработать с помощью PHP, а затем сохранить эти обработанные данные во временное хранилище (например, кэш, например Memcache, Couchbase, Redis). Эти данные должны быть установлены со временем истечения, время истечения полностью зависит от типа данных. Кэширование значительно снизит нагрузку на вашу базу данных.
  4. Данные хранятся в нормализованном виде. Но если вы заранее знаете, что данные будут запрашиваться, и для создания этих данных требуются объединения из многих таблиц, то обработанные данные заранее могут храниться в отдельной таблице и могут обслуживаться из этой таблицы.
  5. Отправьте как можно меньше данных на стороне клиента. Меньший размер HTML сохранит пропускную способность, и браузер сможет быстро отобразить страницу.
  6. Загружать данные по требованию (используя ajax, отложенную загрузку и т. Д.), Например, изображение не отображается на странице до тех пор, пока пользователь не нажмет на вкладку, это изображение должно быть загружено по щелчку пользователя.
2

Другие решения

Две мысли: компьютеры должны работать, люди должны думать. (Реклама IBM 1960-х гг.)

«Преждевременная оптимизация — корень всего зла (или, по крайней мере, большей части) в программировании». —Дональд Кнут

Если вы не планируете или станете Google, Amazon или Facebook, вам следует сосредоточиться на функциональности. «Заставь это работать, прежде чем сделать это быстро». если ты являются планируя расти до такого размера, делайте то, что они делали: бросайте оборудование в проблему. Это дешевле и с большей вероятностью будет эффективным.

Отредактировано, чтобы добавить: Поскольку вы управляете вычислительной мощностью на сервере, но, вероятно, не на клиенте, обычно лучше ставить интенсивные задачи на сервере, особенно если клиенты, вероятно, будут мобильными устройствами. Однако следует учитывать задержку в сети, требования к пропускной способности и время отклика. Если вы можете улучшить время отклика путем обработки на клиенте, подумайте об этом. Итак, оптимизируйте пользовательский интерфейс, а не циклы процессора; Вы можете купить больше циклов процессора, когда они вам нужны.

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

2

Так что, как правило, обрабатывайте как можно больше данных в базе данных. Стоимость создания нового соединения с запросом очень высока, поэтому вы хотите максимально ограничить его. Даже если вам придется написать какой-то очень некрасивый SQL, выполните JOIN почти всегда будет быстрее, чем выполнять 2 SELECT заявления.

PHP действительно должен использоваться только для форматирования и кэширования данных. Если вы выполняете тонну операций с данными после каждого запроса, вы, вероятно, храните свои данные в формате, который не очень практичен. Вы хотите кэшировать все, что часто не изменяется в состоянии почти готовности к серверу, используя что-то вроде Redis или APCu.

Наконец, клиент никогда не должен выполнять операции с данными над несколькими объектами. Вы никогда не знаете о доступности клиентских ресурсов, поэтому всегда держите данные клиента в тонусе. Выполните разбиение на страницы и сортировку для любых наборов данных, размер которых превышает несколько десятков в фоновом режиме. AJAX-запрос с использованием AngularJS обычно выполняется так же быстро, как и сортировка более 100 элементов на iPad 2.

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

1
По вопросам рекламы [email protected]