Проверка работоспособности ввода / вывода - проверка существования файла - PullRequest
2 голосов
/ 15 октября 2008

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

Мой инстинкт заключается в том, что проверка существования файла настолько дешева, что вам не стоит об этом беспокоиться, но мне сказали иначе. Наше решение для хранения данных - достаточно мощное (не просто диск IDE на веб-сервере), если это поможет. Мой вопрос в основном: правильный ли мой инстинкт?

Спасибо!

Примечание. Эти файлы никогда не удаляются. Что-то должно пойти не так, чтобы они пропали, но это случается несколько раз в неделю. Кроме того, причина, по которой я хочу проверить существование файла, заключается в том, что я могу вернуть альтернативный ресурс, находящийся на диске, поэтому я хотел бы иметь возможность использовать эту логику в одном месте, а не заниматься поиском исключения и работой что в этом контексте.

Ответы [ 11 ]

5 голосов
/ 15 октября 2008

Даже если вы проверяете, что он существует непосредственно перед тем, как пытаться его обслужить, он может быть удален между чеком и вашим обслуживанием.

Проблема в том, что вы ничего не отправляете обратно, если не можете обработать файл. Попытка обслужить несуществующий файл должна вызвать исключение (или любой другой эквивалент на вашей платформе) - вы должны обработать это исключение, возвращая соответствующую страницу ошибки «Извините, мы не смогли найти ваш файл».

3 голосов
/ 15 октября 2008

Если файл не существует, это исключительное обстоятельство (как вы говорите, БД всегда прав), вы не должны проверять его.

Если его нет, вы получаете исключение и обрабатываете его соответствующим образом. Похоже, именно так вы говорите, что система работает, и я бы с этим справился.

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

При правильной обработке / всплытии исключений у вас не должно возникнуть проблем с возвратом актива оповещения. Переосмыслите обработку исключений, а не измените способ работы системы.

1 голос
/ 15 октября 2008

Мне не известны какие-либо серьезные проблемы с производительностью при таком подходе, но проверка существования файла перед его открытием может привести к неожиданным результатам (другой процесс может удалить файл между проверкой и открытием его).

1 голос
/ 15 октября 2008

У вас не должно возникнуть серьезных проблем с производительностью, если вы не используете какую-то действительно странную схему хранения.

0 голосов
/ 15 октября 2008

Попробуйте открыть файл и затем передать его в потоковом режиме. Это возможно? Таким образом, если вам не удастся открыть и отправить его в потоковом режиме, вы не сможете отправить его и сможете выполнить соответствующую обработку ошибок.

0 голосов
/ 15 октября 2008

Если вы собираетесь открыть его сразу после этого, то проверка его существования по существу бесплатно .

0 голосов
/ 15 октября 2008

На производительность не должно быть никакого влияния. Медленная часть здесь идет на диск, чтобы прочитать заголовок файла, но если вы собираетесь загрузить файл, вам придется сделать это в любом случае, и любая приличная система хранения (почти любая из последних двух десятилетий) будет кэшируйте чтение из чека, чтобы часть чтения была намного быстрее, когда вы действительно открываете файл. Сказав это, я согласен с Mattlant, что в общем случае было бы лучше перехватить файл, а не исключение, и обработать его должным образом, если обычно ожидается, что файл будет там.

0 голосов
/ 15 октября 2008

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

Заявка нуждается чек.

0 голосов
/ 15 октября 2008

Файловый ввод-вывод, как правило, обходится дороже по сравнению с чтением из базы данных или в памяти, но я слышал старое «база данных хранит информацию, поэтому она не должна ошибаться» слишком много раз при поиске сбоя системы или необработанного исключения , Поэтому я бы проверил существование и элегантно восстановился, если ваши требования к производительности необычно высоки.

0 голосов
/ 15 октября 2008

Вы перенаправляете в файл или читаете и обслуживаете содержимое файла с помощью кода?

Если первое, что произойдет, если файл по какой-то причине не существует? Стандартная ошибка 404, или у вас есть специализированная страница ошибок? Это приемлемо для этого случая?

Если последнее, просто откройте файл и обработайте исключение соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...