Быстродействие
Не могли бы подсказать что будет работать быстрее
1)
а)дозапись строки в конец файла (и его предварительное открытие)
или
б) создание нового и запись в него строки? На много или нет?
2)
а)
открытие файла, чтение сотен строк
или
б) открытие файла из папки с тысячью файлами и чтение одной строки?
Вроде в первом случае а) а во втором б), но нужно либо б)б) или а)а), что лучше выбрать?
И ещё вопросик не в тему. функцию htmlspecialchars() важно использовать после любой формы ввода, или в определённых случаях не имеет смысла? Допустим если полученая строка просто записывается в файл есть опасность что сценарий будет работать не так если ввести какие нибудь скрипты в форму ввода?
1)
а)дозапись строки в конец файла (и его предварительное открытие)
или
б) создание нового и запись в него строки? На много или нет?
2)
а)
открытие файла, чтение сотен строк
или
б) открытие файла из папки с тысячью файлами и чтение одной строки?
Вроде в первом случае а) а во втором б), но нужно либо б)б) или а)а), что лучше выбрать?
И ещё вопросик не в тему. функцию htmlspecialchars() важно использовать после любой формы ввода, или в определённых случаях не имеет смысла? Допустим если полученая строка просто записывается в файл есть опасность что сценарий будет работать не так если ввести какие нибудь скрипты в форму ввода?
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
1. Использовать Базу Данных ;-)
2. До тех пор, пока в PHP скрипте не вызывается eval($_GET["hack_me_please"]), думаю, что ничего страшного случится не может :-)
На самом деле htmlspecialchars защищает только от JavaScript вставок, потому если не собираешься выводить данные из файла на экран, то и ф-ция эта не нужна.
Если серьёзно по первому вопросу, то, к сожалению, ничего точно сказать не могу.
Могу лишь посоветовать создать тестовую структуру большого размера для обоих случаев и засечь время выполнения скрипта.
И ещё, насчёт пункта 2А:
Насколько я понимаю, чтение сотен строк необходимо лишь для того, чтобы добраться до определённой строки?
Попробуй посмотреть fseek, может поможет ..
А вообще, обычно подобные проблемы решаются методом золотой середины:
А вот этот самый N опять же прийдётся искать экспериментальным методом,
мне кажется, что до какого-то значения будет лучше первый способ, после него - второй.
Таким образом, обьединив оба способа на этой границе, получишь оптимум.
P.S. Всё вышенаписаное является ИМХО
2. До тех пор, пока в PHP скрипте не вызывается eval($_GET["hack_me_please"]), думаю, что ничего страшного случится не может :-)
На самом деле htmlspecialchars защищает только от JavaScript вставок, потому если не собираешься выводить данные из файла на экран, то и ф-ция эта не нужна.
Если серьёзно по первому вопросу, то, к сожалению, ничего точно сказать не могу.
Могу лишь посоветовать создать тестовую структуру большого размера для обоих случаев и засечь время выполнения скрипта.
И ещё, насчёт пункта 2А:
Насколько я понимаю, чтение сотен строк необходимо лишь для того, чтобы добраться до определённой строки?
Попробуй посмотреть fseek, может поможет ..
А вообще, обычно подобные проблемы решаются методом золотой середины:
создавать файлы с N-колличеством строк с именами, например, 1_N.dat, N+1_2*N.dat и т.д.открытие файла из папки с тысячью файлами и чтение одной строки
А вот этот самый N опять же прийдётся искать экспериментальным методом,
мне кажется, что до какого-то значения будет лучше первый способ, после него - второй.
Таким образом, обьединив оба способа на этой границе, получишь оптимум.
P.S. Всё вышенаписаное является ИМХО
Быстродействие не может быть вопросом поскольку обработку производит php интопретатор на сервере! и получаем исключительно результат, далее обработка сотен файло естественно пожрет больше ресурсов нежели 1 файла с n-колличеством строк..
Эээ всмысле???
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
Во-первых:
а) открытие файла, чтение сотен строк
б) открытие одного файла из папки с тысячью файлами и чтение одной строки
А во-вторых:
Ты исходишь из того, что быстродействие сервера является неограниченной величиной?
Не говоря уже о том, что если пара сотен пользователей каждую секунду будет обращаться к скрипту, "быстродействие для которого не является вопросом", то вся эта конструкция удачно рухнет получше любой DOS-атаки.
а) открытие файла, чтение сотен строк
б) открытие одного файла из папки с тысячью файлами и чтение одной строки
А во-вторых:
Это утверждение настолько смешно, что его даже комментировать не хотелось бы, но всё же:Duncon писал(а):Быстродействие не может быть вопросом поскольку обработку производит php интопретатор на сервере!
Ты исходишь из того, что быстродействие сервера является неограниченной величиной?
Не говоря уже о том, что если пара сотен пользователей каждую секунду будет обращаться к скрипту, "быстродействие для которого не является вопросом", то вся эта конструкция удачно рухнет получше любой DOS-атаки.
По факту некогда не встречался с задачей вытащить некий файл из тысяч в папке, тормоза страшные, хотя зависит от исполнения на тесты времени сей час нет...
2 А как еще, тебя послушать ьак все на твоей домашней машине происходит... Не пугай меня я конечно понимаю жарко мозги плавяться, но что такое php вспомни и как оно работает... Сервера сей час мощьные 2500 тысячи оппираций в секунду в худшем случае, думаю все успевают..
Пара сотен смогут обратиться к скрипту и если все граматно при обращении к файлу встанут в очередь. И еще кеш рулит..
2 А как еще, тебя послушать ьак все на твоей домашней машине происходит... Не пугай меня я конечно понимаю жарко мозги плавяться, но что такое php вспомни и как оно работает... Сервера сей час мощьные 2500 тысячи оппираций в секунду в худшем случае, думаю все успевают..
Пара сотен смогут обратиться к скрипту и если все граматно при обращении к файлу встанут в очередь. И еще кеш рулит..
Сдаётся мне, скорость будет сильно зависеть от операционной системы...
С файлами есть типичная засада: например, при реализации банального счётчика закачек, считывается из файла число, увеличивается на 1 и записывается обратно в файл. Если считывание производится двумя копиями скрипта одновременно (или почти одновременно, т.е. до записи одной из копий в файл), то в итоге счётчик "потеряет" одну закачку. Если нагрузка большая, то и потерь будет больше.
Можно, конечно, лочить файл, но производительности это не добавит...
Duncon, сервера-то мощные, да только большинство скриптов работает на виртуальных серверах. Т.е. если у тебя на машине слишком активные соседи, то на слишком большую производительность сервера рассчитывать не приходится.
С файлами есть типичная засада: например, при реализации банального счётчика закачек, считывается из файла число, увеличивается на 1 и записывается обратно в файл. Если считывание производится двумя копиями скрипта одновременно (или почти одновременно, т.е. до записи одной из копий в файл), то в итоге счётчик "потеряет" одну закачку. Если нагрузка большая, то и потерь будет больше.
Можно, конечно, лочить файл, но производительности это не добавит...
Duncon, сервера-то мощные, да только большинство скриптов работает на виртуальных серверах. Т.е. если у тебя на машине слишком активные соседи, то на слишком большую производительность сервера рассчитывать не приходится.
Даже самый дурацкий замысел можно воплотить мастерски
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Мой текущий проект: полгода проемучились с компонентой заказчика, которая имплементирует интерфейс java.util.Map, используя ключи как имена файлов и значения как сериализованное содержимое файлов. Нужного перформанса и стабильности не достигли.
Когда жареный петух в ж.. клюнул (со стороны заказчика верхнего уровня), заказчик скрепя сердце дал пару табличек в своем Оракле. Нужный перформанс был достигнут сразу, в первом же билде.
Когда жареный петух в ж.. клюнул (со стороны заказчика верхнего уровня), заказчик скрепя сердце дал пару табличек в своем Оракле. Нужный перформанс был достигнут сразу, в первом же билде.
2B OR NOT(2B) = FF
Я не знаю как работают файловые и операционные системы, но всё же помоему то что открыть конкретный файл с точным именем из папки хоть с милионом других файлов быстрее чем прочитать вхолостую сотню строк. Может я и ошибаюсь. Просто я не знаю насколько быстрей дописать в файл чем создать новый и записать строку в него. Поэтому какая связка работает быстрее я не знаю. Но я остановился на куче файлов.
У меня ещё есть кучка вопросов. Чтобы не открывать новую тему я их тут задам, а то и так уже подзасорил форум.
1)я работаю при помощи денвера и на реальных серваках ничего никогда не тестил. Скажите плз, сервак выводит какие нибудь ошибки на экран сам? Допустим открыть несуществующий файл и не обработать такую ошибку в коде, сервак отреагирует или просто проигнорит?
2) всё про то же, Если использовать неиницмализированную переменную, сервак отреагирует? И как вообще можно проверить существует ли переменная. В конкретном случае куки. И если существует прочесть, а если нет - создать её?
У меня ещё есть кучка вопросов. Чтобы не открывать новую тему я их тут задам, а то и так уже подзасорил форум.
1)я работаю при помощи денвера и на реальных серваках ничего никогда не тестил. Скажите плз, сервак выводит какие нибудь ошибки на экран сам? Допустим открыть несуществующий файл и не обработать такую ошибку в коде, сервак отреагирует или просто проигнорит?
2) всё про то же, Если использовать неиницмализированную переменную, сервак отреагирует? И как вообще можно проверить существует ли переменная. В конкретном случае куки. И если существует прочесть, а если нет - создать её?