Быстродействие

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

pashtet
Сообщения: 73
Зарегистрирован: 09 апр 2006, 10:53
Откуда: Белгород

Не могли бы подсказать что будет работать быстрее
1)
а)дозапись строки в конец файла (и его предварительное открытие)
или
б) создание нового и запись в него строки? На много или нет?
2)
а)
открытие файла, чтение сотен строк
или
б) открытие файла из папки с тысячью файлами и чтение одной строки?
Вроде в первом случае а) а во втором б), но нужно либо б)б) или а)а), что лучше выбрать?

И ещё вопросик не в тему. функцию htmlspecialchars() важно использовать после любой формы ввода, или в определённых случаях не имеет смысла? Допустим если полученая строка просто записывается в файл есть опасность что сценарий будет работать не так если ввести какие нибудь скрипты в форму ввода?
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

1. Использовать Базу Данных ;-)

2. До тех пор, пока в PHP скрипте не вызывается eval($_GET["hack_me_please"]), думаю, что ничего страшного случится не может :-)
На самом деле htmlspecialchars защищает только от JavaScript вставок, потому если не собираешься выводить данные из файла на экран, то и ф-ция эта не нужна.


Если серьёзно по первому вопросу, то, к сожалению, ничего точно сказать не могу.
Могу лишь посоветовать создать тестовую структуру большого размера для обоих случаев и засечь время выполнения скрипта.

И ещё, насчёт пункта 2А:
Насколько я понимаю, чтение сотен строк необходимо лишь для того, чтобы добраться до определённой строки?
Попробуй посмотреть fseek, может поможет ..

А вообще, обычно подобные проблемы решаются методом золотой середины:
открытие файла из папки с тысячью файлами и чтение одной строки
создавать файлы с N-колличеством строк с именами, например, 1_N.dat, N+1_2*N.dat и т.д.
А вот этот самый N опять же прийдётся искать экспериментальным методом,
мне кажется, что до какого-то значения будет лучше первый способ, после него - второй.
Таким образом, обьединив оба способа на этой границе, получишь оптимум.

P.S. Всё вышенаписаное является ИМХО
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Быстродействие не может быть вопросом поскольку обработку производит php интопретатор на сервере! и получаем исключительно результат, далее обработка сотен файло естественно пожрет больше ресурсов нежели 1 файла с n-колличеством строк..
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

Duncon, обработка одного файла
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Эээ всмысле???
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

Во-первых:

а) открытие файла, чтение сотен строк
б) открытие одного файла из папки с тысячью файлами и чтение одной строки

А во-вторых:
Duncon писал(а):Быстродействие не может быть вопросом поскольку обработку производит php интопретатор на сервере!
Это утверждение настолько смешно, что его даже комментировать не хотелось бы, но всё же:

Ты исходишь из того, что быстродействие сервера является неограниченной величиной?

Не говоря уже о том, что если пара сотен пользователей каждую секунду будет обращаться к скрипту, "быстродействие для которого не является вопросом", то вся эта конструкция удачно рухнет получше любой DOS-атаки.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

По факту некогда не встречался с задачей вытащить некий файл из тысяч в папке, тормоза страшные, хотя зависит от исполнения на тесты времени сей час нет...

2 А как еще, тебя послушать ьак все на твоей домашней машине происходит... Не пугай меня я конечно понимаю жарко мозги плавяться, но что такое php вспомни и как оно работает... Сервера сей час мощьные 2500 тысячи оппираций в секунду в худшем случае, думаю все успевают..
Пара сотен смогут обратиться к скрипту и если все граматно при обращении к файлу встанут в очередь. И еще кеш рулит..
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

Сдаётся мне, скорость будет сильно зависеть от операционной системы...
С файлами есть типичная засада: например, при реализации банального счётчика закачек, считывается из файла число, увеличивается на 1 и записывается обратно в файл. Если считывание производится двумя копиями скрипта одновременно (или почти одновременно, т.е. до записи одной из копий в файл), то в итоге счётчик "потеряет" одну закачку. Если нагрузка большая, то и потерь будет больше.
Можно, конечно, лочить файл, но производительности это не добавит...
Duncon, сервера-то мощные, да только большинство скриптов работает на виртуальных серверах. Т.е. если у тебя на машине слишком активные соседи, то на слишком большую производительность сервера рассчитывать не приходится.
Даже самый дурацкий замысел можно воплотить мастерски
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Мой текущий проект: полгода проемучились с компонентой заказчика, которая имплементирует интерфейс java.util.Map, используя ключи как имена файлов и значения как сериализованное содержимое файлов. Нужного перформанса и стабильности не достигли.
Когда жареный петух в ж.. клюнул (со стороны заказчика верхнего уровня), заказчик скрепя сердце дал пару табличек в своем Оракле. Нужный перформанс был достигнут сразу, в первом же билде.
2B OR NOT(2B) = FF
pashtet
Сообщения: 73
Зарегистрирован: 09 апр 2006, 10:53
Откуда: Белгород

Я не знаю как работают файловые и операционные системы, но всё же помоему то что открыть конкретный файл с точным именем из папки хоть с милионом других файлов быстрее чем прочитать вхолостую сотню строк. Может я и ошибаюсь. Просто я не знаю насколько быстрей дописать в файл чем создать новый и записать строку в него. Поэтому какая связка работает быстрее я не знаю. Но я остановился на куче файлов.
У меня ещё есть кучка вопросов. Чтобы не открывать новую тему я их тут задам, а то и так уже подзасорил форум.
1)я работаю при помощи денвера и на реальных серваках ничего никогда не тестил. Скажите плз, сервак выводит какие нибудь ошибки на экран сам? Допустим открыть несуществующий файл и не обработать такую ошибку в коде, сервак отреагирует или просто проигнорит?
2) всё про то же, Если использовать неиницмализированную переменную, сервак отреагирует? И как вообще можно проверить существует ли переменная. В конкретном случае куки. И если существует прочесть, а если нет - создать её?
Ответить