Вопрос более филосовский чем практический - у меня на сайте размещаются статьи и к ним все подряд пишут комментарии. Статья с комментариями к ней располагается в одном файле. За сутки каждую статью просматривают около 10 000 раз, камментируют примерно 10-40 раз (такая разница, потому что сами комментарии так же представляют интерес). Сайт лежит на виртуальном сервере.
Нужна ли в этом случае блокировка файлов (в Perl это flock) при чтении статей/публикации комментариев? Просто, т. к. сервер виртуальный, загружать его как-то не хотелось бы лишний раз - а то меня хостинг и так материт, однако боюсь одновременного доступа нескольких пользователей на чтение/запись. Хотелось бы услышать Ваше мнение.
Загрузка процессора сервера достигает 60%, основной приток посетителей сайта приходится на 10:00 - 14:00 МСК.
Второй интересующий момент - выбор режима доступа - разделяемый или монопольный. Разделяемый, конечно, предпочтительней, однако, у меня под NT, помнится, были с ним проблемы. На сервере же стоит Linux Red Hat, про который я мало знаю - нормально ли он работает с LOCK_SH или нет.
Заранее благодарен.
Рассмотрю очень маловероятный случай "столкновения...26.10.04 00:43 Автор: Sashman Статус: Незарегистрированный пользователь
Рассмотрю очень маловероятный случай "столкновения интересов" двух скриптов (т.е. крайний случай, когда запросы двух разных пользователей пришли "почти" одновременно и файл заблокирован скриптом, выполняющий первый запрос)
Монопольный лок - если скрипт записывает коммент от одного пользователья и от другого юзера приходит запрос на прочтение/ответ, то он будет ждать (миллисекунды, но в условиях высокой посещаимости - это лишние циклы процессора).
Разделяемый - нет простоя для "только чтения", зато есть шанс прочитать "нецелый файл" (если коммент записался еще неполностью), в случае же столкновения двух "пишущих" скриптов второй скрипт будет ждать освобождения файла.
Логично будет лочить файл в разделяемом режиме для чтения, и в монопольном для записи комментов.
Мой совет - пользуйся БД хотя бы для хранения ответов, т.к. задолбаешся с блокировками.