Прямой доступ к серверной базе данных через Ajax (без PHP или какого-либо другого промежуточного уровня)

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

Теперь предположим, что это клиентское приложение должно получить доступ к удаленной базе данных. Обычное решение, похоже, связано с слоями Ajax / PHP / MySQL.

Мне кажется, что PHP-слой больше не нужен; вся логика и пользовательский интерфейс заботятся о приложении браузера.

Тогда возникает вопрос: не должен ли быть (надежный и надежный) сервер баз данных, который просто берет HTTP-запрос и возвращает результат XML? Затем этот результат можно легко проанализировать, например, jQuery на стороне клиента.

Я не могу найти базу данных или структуру в этих строках. Есть идеи?

Вы имеете в виду, есть ли база данных, которая поддерживает протокол HTTP? Ну, есть некоторые. У вас есть MonetDB / XQuery ( http://monetdb.cwi.nl/XQuery/QuickTour/XRPC/ ) и базы данных NoSQL, такие как CouchDB ( http://couchdb.apache.org/ ). Вы также используете его в более традиционных rdbms-типах, таких как Oracle (Oracle Application Express использует встроенный HTTP-сервер, а также службу APEX http://www.oracle.com/technology/products/database/application_express/index.html ) и MS SQL (объект схемы службы, такой как http://msdn.microsoft.com/en-us/library/ms190332.aspx и представления XML, см. http://msdn.microsoft.com/en-us/library/aa286527 .aspx )

Но на самом деле – вы должны сомневаться, действительно ли это полезно.

Я имею в виду, что всегда будет один компонент, который обрабатывает HTTP. У вас может возникнуть ощущение, что хорошо вынимать уровень webserver / php, потому что вы чувствуете, что он дополнительно, и находится между приложением и базой данных. Но на самом деле решения, которые я только что упомянул, не так уж различны – они помечены поверх одного и того же программного обеспечения, но данные все равно должны проходить через этот дополнительный слой.

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

В принципе, создавая http-сервер в базе данных, вы обременяете сервер db задачей, которая потребляет ресурсы, которые могли быть использованы для других задач db. Теперь подумайте о распространенном случае, когда вы заплатили за процессорную лицензию на свой db. Вы действительно хотели бы потратить эту лицензию на то, что DHB-дескриптор обрабатывает HTTP-запросы, когда вы могли бы сделать именно это с помощью бесплатного веб-сервера, такого как apache? Даже если вы используете бесплатный продукт софт-базы данных, во многих случаях сервер базы данных является узким местом. Вы действительно хотите поставить больше задач на пластинку, построив в нее HTTP-сервер?

Есть еще одна причина, почему я думаю, что это не такая хорошая идея. Вы упомянули XML как формат обмена данными. Гуди. Но что, если вы хотите JSON? Или ЯМЛ? Или, может быть, простой CSV? Языки сценариев Webserver, такие как PHP, ASP.NET, Perl и даже Java, имеют очень хорошие библиотеки для решения этих проблем. Типичных языков хранимых процедур базы данных нет. Конечно, вы можете сделать еще один шаг и сказать, черт возьми, почему бы не построить Java или .NET в базе данных, но это опять перевернуло проблему – задача базы данных заключается в хранении и извлечении данных и хороших заботиться о данных, пока он хранится. Обработка данных для представления его в приложение не является частью этого. Если вы сделаете это частью работы db, чтобы позаботиться об этом, вы уберете важный источник гибкости и масштабируемости системы в целом. Вы можете почувствовать, что это меньше накладных расходов, потому что один компонент меньше (например, веб-сервер / язык сценариев), чтобы думать, но на самом деле он все еще существует, он просто скрывается внутри вашего программного обеспечения базы данных и засасывает ресурсы, которые могли быть использованы для хранение и извлечение данных, разбор запросов и т. д.

Ну, раздражающая часть будет аутентификацией.

Поскольку код выполняется полностью на стороне клиента, клиент затем знает все данные аутентификации для доступа к серверу базы данных.

Это скорее .. ошибка … небезопасная. Вероятно, поэтому не так много людей создали сервер прямого доступа.

Если вы действительно хотите свести скрипты PHP / Server-Side к минимуму, сделайте довольно надежный PHP-прокси, чем правильно избегайте всех данных. Храните данные конфигурации в отдельном защищенном ini-файле или даже в файле php.ini, и вы можете в значительной степени игнорировать серверные скрипты после этого.

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