Это просто, чтобы объяснить, как я думаю, что это, вероятно, работает: Скажем, веб-серверу нужны данные из 10 таблиц. Данные, которые, наконец, будут отображаться на клиенте, требуют какого-то форматирования, которое может быть выполнено либо в базе данных, либо в веб-сервере. Предположим, что время для извлечения необработанных данных для одной таблицы составляет 1 секунду, а время для извлечения форматированных данных за один стол 2 сек (это занимает одну секунду, чтобы форматировать данные для одной таблицы и форматирование может быть легко сделано либо на веб-сервере или в базе данных.)Как веб-сервер взаимодействует с базой данных?
рассмотрим следующие случаи для связи:
Случай 1:
for(i = 0; i < 10; i++)
{
table[i].getDataFromDB(); //2 sec - gets formatted datafrom DB, Call is completed before control goes to next statement
table[i].sendDataToClient(); //0 sec - control doesn't wait for completion of this step
}
Случай 2:
for(i = 0; i < 10; i++)
{
table[i].getDataFromDB(); //1 sec - gets raw data from DB, Call is completed before control goes to next statement
table[i].formatData(); //0 sec - will be executed as a parallel process which takes 1 sec to complete (control moves to next statement before completion)
}
formatData()
{
//format the data which takes 1 sec
sendDataToClient(); //0 sec - control doesn't wait for completion of this step
}
Предположим, что для отправки данных с веб-сервера клиенту не требуется времени (0 секунд), поскольку он будет постоянным для обоих случаев.
В случае 1 данные для каждой таблицы будут отображаться с интервалом в 2 секунды на клиенте, а полные данные будут составлять на клиенте через 20 секунд.
В случае 2 данные для первой таблицы будут отображаться через 2 секунды, но данные для следующих 9 будут отображаться с секунд 3,4, ..., 11.
Каков правильный способ и как это достигается между популярным веб-сервером и базами данных?