Что быстрее по производительности? Создание REST API и использование вашего веб-приложения с помощью REST API для всех взаимодействий с вашей базой данных ИЛИ непосредственное выполнение запросов к вашей базе данных (т. Е. Использование любого типичного объекта, который ваш язык использует для запроса базы данных, такого как JDBC для Java)?
То, как я вижу это с REST:
- Вы делаете объект в своем коде для вызова метода REST
- Вызовите http метод
- Код внутри вашего REST API запрашивает базу данных
- База данных возвращает некоторые данные
- Код API REST упаковывает данные в Json и отправляет их вашему клиенту
- Клиент получает ответ Json / XML
- Ответ карты на объект в вашем коде
С другой стороны, запрос к базе данных напрямую:
- Вы делаете объект со строкой запроса для запроса базы данных
- База данных возвращает некоторые данные
- Ответ карты на объект в вашем коде
Не значит ли это, что использование REST API будет медленнее? Может быть, это зависит от типа базы данных (SQL против NoSQL)?
Ответы:
Когда вы добавляете сложность, код будет работать медленнее. Внедрение службы REST, если она не требуется, замедлит выполнение, поскольку система делает больше.
Абстрагирование базы данных является хорошей практикой. Если вы беспокоитесь о скорости, вы можете изучить кэширование данных в памяти, чтобы не обрабатывать базу данных для обработки запроса.
Прежде чем оптимизировать производительность, я хотел бы рассмотреть проблему, которую вы пытаетесь решить, и архитектуру, которую вы используете, я изо всех сил пытаюсь придумать ситуацию, когда параметры базы данных будут иметь прямой доступ по сравнению с REST.
источник
extra work
. Но на самом деле это может быть быстрее за счет кеширования повторного запроса.Если вас беспокоит скорость, то да, служба отдыха будет работать медленнее по причинам, указанным выше. Однако скорость описываемого вами типа редко является первостепенной задачей и, если она есть, может быть решена другими способами. Преждевременная оптимизация - корень всего зла .
Подумайте, если ваша основная задача - совместимость (мобильная связь, Интернет, B2B), теперь REST очень привлекателен, поскольку не зависит от технологий.
Предположим, вы код для базы данных. Что бы вы сделали, если решите изменить свое хранилище данных? Насколько сложно будет это сделать, если вы тесно связаны с основным магазином?
Реальный ответ - это зависит , но, надеюсь, я дал вам кое-что подумать!
источник
Если вам трудно ответить на этот вопрос.
Правильный общий ответ должен быть: это зависит.
В твоей мысли ошибка.
И эта ошибка связана с тем, что вы не до конца понимаете REST и его принципы. REST не был изобретен, потому что некоторым ботаникам было круто (конечно, так) отправлять объекты Javascript через HTTP по проводам. Основным преимуществом использования HTTP является возможность использования кэширования . Если вы сделаете ваши результаты кешируемыми , то к БД будет меньше запросов. И никакая сортировка не вовлечена. Ответ может быть доставлен напрямую.
Поскольку ответ @Klees не совсем верен :
Когда речь идет о результатах кэширования, это не влияет на ваше приложение: доставка известных ответов на известные вопросы может осуществляться через обратные прокси-серверы.
источник
Введение дополнительного уровня обслуживания всегда сопряжено со сложностями и накладными расходами. Существует несколько конкретных типов архитектуры, в которых введение общего уровня обслуживания (например, REST API) может улучшить производительность из-за совместного кэширования, но, похоже, это не та архитектура, которая у вас есть.
Рассмотрим архитектуру, в которой у вас есть несколько веб-приложений или несколько приложений для настольных компьютеров, подключающихся напрямую к одной базе данных. Если они часто выполняют одни и те же запросы, это может повысить производительность для кэширования результатов запросов в общей службе. Особенно, если, скажем, сотни настольных приложений обращаются к одной и той же базе данных напрямую (не через веб-приложение!) И выполняют одни и те же запросы, это может стать серьезным улучшением. Однако даже в этой архитектуре основной причиной внедрения совместно используемой службы, вероятно, будет безопасность и абстракция данных, а не производительность.
Но, похоже, у вас есть одно веб-приложение, которое напрямую подключается к базе данных. В этом случае нет смысла вводить дополнительный уровень обслуживания. Кэширование, абстракция базы данных и т. Д. Могут обрабатываться на уровне доступа к данным в том же приложении.
источник
По-разному.
Очевидно, что чем больше слоев в вашем коде, тем медленнее он идет. Но ... наступает момент, когда прямая сквозная производительность не так важна, как масштабируемость. Если у вас есть 1 пользователь, который обращается к вашей базе данных на локальном ПК, он может работать быстро. Если у вас есть тысяча пользователей, обращающихся к одной и той же БД на одном ПК, скорее всего, вы увидите, что все они разочарованы. Решение состоит в том, чтобы переместить БД в другое поле, добавить слой посередине, и хотя для 1 пользователя он будет работать медленнее, когда тысячи обращаются к нему, он будет работать быстрее. (это упрощенный ответ, но верно в принципе).
Есть и другие причины скрывать вашу БД за уровнем среднего уровня, например, безопасность.
источник
Я не знаю, где вы заблудились, но совершенно ясно, что, когда вы используете REST API, вы делаете дополнительный шаг, а дополнительный шаг «всегда» означает медленнее, когда требуется программирование.
Есть плюсы и минусы, но если вы можете получить доступ к базе данных напрямую из своего приложения, всегда лучше вызывать ее напрямую, а не через Web API, конечно, если вы используете Web API, вы можете легко перенести свое приложение на другую платформу.
источник
ОСТАЛЬНЫЕ :
Локальная БД:
ЭТО ОЧЕНЬ ОГРОМНАЯ РАЗНИЦА, ЛЮДИ ЧАСТО ЗАБЫЛИ
источник