Особенности управления одновременным
доступом
Управление одновременным доступом — это то, чем отличаются различные СУБД.
Именно это отличает СУБД от файловой системы и одну СУБД от другой. Для програм-
миста важно, чтобы его приложение базы данных корректно работало в условиях одно-
временного доступа, и именно это постоянно забывают проверять. Приемы, прекрасно
работающие в условиях последовательного доступа, работают гораздо хуже при одно-
временном их применении несколькими сеансами. Если не знать досконально, как в кон-
кретной СУБД реализованы механизмы управления одновременным доступом, то:
• будет нарушена целостность данных;
• приложение будет работать медленнее, чем предусмотрено, даже при небольшом
количестве пользователей;
• будет потеряна возможность масштабирования до большого числа пользователей.
Обратите внимание: я не пишу "возможно, будет..." или "вы рискуете..." — все эти
проблемы точно будут. Все это вы получите, даже не представляя, что именно происхо-
дит. При неправильном управлении одновременным доступом будет нарушена целост-
ность данных, поскольку то, что работает отдельно, будет работать не так, как предпо-
лагалось, в многопользовательской среде. Приложение будет работать медленнее,
поскольку придется ждать доступа к данным. Возможность масштабирования будет по-
теряна из-за проблем с блокированием и конфликтов блокировок. По мере усложнения
запросов к ресурсу ждать придется все дольше и дольше. Можно провести аналогию с
таможенным переходом на границе. Если машины приезжают по одной, равномерно, с
предсказуемой частотой, никаких очередей нет. Если же одновременно приедет много
машин, начинают формироваться очереди. Причем время ожидания растет нелинейно
по отношению к длине очереди. С определенного момента больше времени сотрудни-
ков уходит на "наведение порядка" в очереди, чем на таможенный досмотр машин (в
случае СУБД мы говорим о планировании процессов и переключении контекста).
Проблемы одновременного доступа выявлять сложнее всего — трудности сопоста-
вимы с отладкой многопотоковой программы. Программа может отлично работать в уп-
равляемой, искусственной среде отладчика, но постоянно "слетать" в "реальном мире".
Например, в условиях интенсивных обращений может оказаться, что два потока одно-
временно изменяют одну и ту же структуру данных. Такого рода ошибки очень сложно
выявлять и исправлять. Если приложение тестировалось только в однопользовательском
режиме, а затем внедряется в среде с десятками одновременно обращающихся пользо-
вателей, вполне вероятно проявление болезненных проблем с одновременным доступом.
В следующих двух разделах будет представлено два небольших примера того, как не-
понимание .особенностей управления одновременным доступом может разрушить дан-
ные или снизить производительность и масштабируемость приложения.
Do'stlaringiz bilan baham: |