Страница 1 из 3

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

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

И ещё вопросик не в тему. функцию htmlspecialchars() важно использовать после любой формы ввода, или в определённых случаях не имеет смысла? Допустим если полученая строка просто записывается в файл есть опасность что сценарий будет работать не так если ввести какие нибудь скрипты в форму ввода?

Добавлено: 13 июл 2006, 18:58
Oscar
1. Использовать Базу Данных ;-)

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


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

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

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

P.S. Всё вышенаписаное является ИМХО

Добавлено: 13 июл 2006, 21:40
Duncon
Быстродействие не может быть вопросом поскольку обработку производит php интопретатор на сервере! и получаем исключительно результат, далее обработка сотен файло естественно пожрет больше ресурсов нежели 1 файла с n-колличеством строк..

Добавлено: 13 июл 2006, 23:38
Oscar
Duncon, обработка одного файла

Добавлено: 14 июл 2006, 09:57
Duncon
Эээ всмысле???

Добавлено: 14 июл 2006, 10:06
Oscar
Во-первых:

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

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

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

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

Добавлено: 14 июл 2006, 14:50
Duncon
По факту некогда не встречался с задачей вытащить некий файл из тысяч в папке, тормоза страшные, хотя зависит от исполнения на тесты времени сей час нет...

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

Добавлено: 16 июл 2006, 14:04
AiK
Сдаётся мне, скорость будет сильно зависеть от операционной системы...
С файлами есть типичная засада: например, при реализации банального счётчика закачек, считывается из файла число, увеличивается на 1 и записывается обратно в файл. Если считывание производится двумя копиями скрипта одновременно (или почти одновременно, т.е. до записи одной из копий в файл), то в итоге счётчик "потеряет" одну закачку. Если нагрузка большая, то и потерь будет больше.
Можно, конечно, лочить файл, но производительности это не добавит...
Duncon, сервера-то мощные, да только большинство скриптов работает на виртуальных серверах. Т.е. если у тебя на машине слишком активные соседи, то на слишком большую производительность сервера рассчитывать не приходится.

Добавлено: 16 июл 2006, 14:19
Absurd
Мой текущий проект: полгода проемучились с компонентой заказчика, которая имплементирует интерфейс java.util.Map, используя ключи как имена файлов и значения как сериализованное содержимое файлов. Нужного перформанса и стабильности не достигли.
Когда жареный петух в ж.. клюнул (со стороны заказчика верхнего уровня), заказчик скрепя сердце дал пару табличек в своем Оракле. Нужный перформанс был достигнут сразу, в первом же билде.

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