Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Скорость записи и копирования
 
 автор: Shorr Kan   (11.03.2006 в 17:28)   письмо автору
 
 

Что происходит быстрее - запись в файл или копирование файла (размер одинаковый)?

Задача обновить информацию в файле как можно быстрее. Стоит ли писать прямо в этот файл или лучше создавать рядышком временной файл, записывать в него, а потом, когда он будет готов - copy(); ?

   
 
 автор: cheops   (11.03.2006 в 21:01)   письмо автору
 
   для: Shorr Kan   (11.03.2006 в 17:28)
 

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

   
 
 автор: Trianon   (12.03.2006 в 15:50)   письмо автору
 
   для: Shorr Kan   (11.03.2006 в 17:28)
 

Может лучше создавать рядышком временной файл, записывать в него, а потом, когда он будет готов - unlink(); rename(); ?

   
 
 автор: Shorr Kan   (12.03.2006 в 19:02)   письмо автору
 
   для: Trianon   (12.03.2006 в 15:50)
 

Это ж явно будет дольше любого варианта, из предложенных мной.

   
 
 автор: Trianon   (12.03.2006 в 20:16)   письмо автору
 
   для: Shorr Kan   (12.03.2006 в 19:02)
 

unlink(); rename(); дольше copy() ?
Почему?

   
 
 автор: Shorr Kan   (13.03.2006 в 09:55)   письмо автору
 
   для: Trianon   (12.03.2006 в 20:16)
 

Две операции, вместо одной.

   
 
 автор: Trianon   (13.03.2006 в 10:08)   письмо автору
 
   для: Shorr Kan   (13.03.2006 в 09:55)
 

А то, что rename - операция атомарная, и выполняется мгновенно, А copy - это целая процедура, время работы которой, грубо говоря, пропорционально размеру файла, это Вы в расчет не берете?

   
 
 автор: Shorr Kan   (13.03.2006 в 15:30)   письмо автору
 
   для: Trianon   (13.03.2006 в 10:08)
 

Не беру, ведь мне это неизвестно. Поделитесь подробностями, раз вы в курсе.

   
 
 автор: Loki   (13.03.2006 в 15:59)   письмо автору
 
   для: Shorr Kan   (13.03.2006 в 15:30)
 

Операции переименования и удаления не работают непосредственно с даннами, только с таблицей FAT. Причем, операция удаления должна быть даже более быстрой чем переименования, так как в имени файла изменяется всего один символ:)

   
 
 автор: Trianon   (13.03.2006 в 16:01)   письмо автору
 
   для: Shorr Kan   (13.03.2006 в 15:30)
 

Какими?
Чтобы скопировать файл, нужно открыть один файл, создать второй. А затем в цикле пока данные в первом файле не кончатся, читать данные из первого файла, и распределяя по ходу дела дисковое пространство, записывать их во второй. Потом оба файла закрыть.
Чтобы переименовать файл, нужно... обновить запись в каталоге, заменив в ней имя.

Все это конечно весьма грубо и многих тонкостей не учитывает, но разницу в сложности процессов позволяет рассмотреть.

   
 
 автор: Shorr Kan   (13.03.2006 в 17:20)   письмо автору
 
   для: Trianon   (13.03.2006 в 16:01)
 

Позволяет. Значит, наиболее быстрый вариант - создание временного файла, затем удаление настоящего и переименование? А нужно ли делать удаление - ведь достаточно переименовать временной в то же имя, что и настоящий...
И как защититься от запроса к несуществующему файлу? Ведь таковой запрос действительно может поступить между unlink и rename.

   
 
 автор: Trianon   (13.03.2006 в 18:02)   письмо автору
 
   для: Shorr Kan   (13.03.2006 в 17:20)
 

А как Вы защищались от запроса к файлу в момент, когда выполняется copy() ?

   
 
 автор: Shorr Kan   (13.03.2006 в 21:38)   письмо автору
 
   для: Trianon   (13.03.2006 в 18:02)
 

Я не защищался, поэтому и спрашиваю - можно ли это сделать?

[поправлено модератором]

   
 
 автор: Trianon   (14.03.2006 в 10:11)   письмо автору
 
   для: Shorr Kan   (13.03.2006 в 21:38)
 

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

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования