Серверный JavaScript 1.4. Руководство по использованию


         

Эти указания являются критичными для


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

Однопоточная библиотека БД может иметь существенные ограничения производительности. Поскольку только один поток имеет доступ к БД в единицу времени, все прочие потоки обязаны ждать, когда первый поток освободит соединение с БД, прежде чем один из них сможет получить доступ к БД. Если доступа ожидают одновременно несколько потоков, каждому придётся ожидать довольно долго.

При разработке доступа к БД Вы должны предусмотреть следующее:

  • Старайтесь максимально сократить взаимодействие с БД.

  • Каждый поток обязан ждать окончания работы другого потока. Чем короче время взаимодействия с БД, тем меньше ожидание.

  • Всегда освобождайте соединение сразу и закрывайте открытые курсоры и хранимые процедуры.


  • Вы должны делать это в любом случае. Но в случае с однопоточной БД это становится абсолютно необходимым для предотвращения ожидания.

  • Всегда используйте явное управление транзакциями.


  • Тогда будет ясно, когда завершена работа с соединением.

  • Не держите соединение открытым, ожидая ввода от пользователя.


  • Пользователи не всегда завершают начатое. Если пользователь сделал переход от Вашего приложения, когда соединение с БД открыто, система не должна заботиться об освобождении этого соединения. Если только Вы не реализуете схему с запросом незанятых соединений (как указано в разделе ), такое соединение может оказаться связанным на достаточно продолжительное время, ограничивая таким образом доступ других пользователей к БД.

  • Не оставляйте курсоры и транзакции открытыми для нескольких страниц Вашего приложения.


  • Когда взаимодействие с БД захватывает несколько страниц приложения, риск того, что пользователь не завершит транзакцию, значительно возрастает.
    Ограничения на использование транзакций для клиентских библиотек БД, которые не являются многопоточными:

    • Если у Вас однопоточные библиотеки и Вы используете два соединения одновременно на одной странице с БД одного типа, Вы можете получить deadlock/мёртвую блокировку, если выполняете явные транзакции (то есть такие, которые начинаются с использования beginTransaction). Это может случиться с транзакциями на одной странице.


    • Содержание  Назад  Вперед