Fopen или file_get_contents, вот в чем вопрос

Сашка

Новичок
Возникла необходимость хранить данные в текстовой БД. (СУБД использовать не актуально, т.к. данных не очень много).

Начал думать над тем, как лучше хранить, как вытаскивать из файла. Начал тестить на время и потребление памяти. Тестился файл на 7Мб (10 000 строк)

Самыми лучшими вариантами оказались классические - fopen и file_get_contents

Сериализация - это какая-то хрень, которая жрала немеряно ресурсов и при этом медленная, поэтому от этого отказался сразу.

file_get_contents + preg_match = отличная связка (самая быстрая, чтобы отыскать нужную строку). Но! Проблема в потреблении памяти. Т.е. он весь файл грузит в память. Это прекрасно отображает функция memory_get_usage

Fopen + fgets() - медленнее в разы (если нужная строка не в первых 500 строках), но при этом memory_get_usage показывает, что потребление памяти вообще мизерное.

Я в этом не разбираюсь, прочитал, что fopen - хранит дескриптер.

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

Производительность мне, честно говоря, не особо критична (устраивает и та, и та), а вот насчет потребления памяти и нагрузки на файловую систему - не все равно.
 

Сашка

Новичок
Я даже и не знаю как ответить...
Как есть.
Т.е. что предпочтительнее, если важна именно снижение потребление оперативки.
Fopen правда не грузит в оперативку.
И насчет нагрузки на файловую систему хотелось бы знать.
 

Vladson

Сильнобухер
Какое оперативка, какое не знаю ??? Вы обкурились опять ???

Скрипт что делает ???

Берёт весь контент ? тогда file_get_contents !!!

Читает частями ? тогда fgets !!!

Какие в задницу медленнее или быстрее, каким раком фгетс читающий (например) 1кб (которые вам нужны из стопицот гигового файла) будет медленнее гетконтентса который будет читать стогиговый файл весь ?
И наоборот если надо прочитать весь файл, нахера писать 100500 строк кода, если хватит одного file_get_contents ???

Инструмент выбирается под задачу, забивать гвозди можно и микроскопом, только надо ли ?
 
Последнее редактирование:

Сашка

Новичок
Какое оперативка, какое не знаю ??? Вы обкурились опять ???

Скрипт что делает ???

Берёт весь контент ? тогда file_get_contents !!!

Читает частями ? тогда fgets !!!

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

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

Мне нужно знать, Fopen - действительно ли не грузит оперативку? memory_get_usage не показывает, что он как-то загружает в файл.
Но ведь он грузит файловую систему, так это. Или нет.

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

Как быть?
 

Redjik

Джедай-мастер
Vladson, именно поэтому и не знаю...
лекцию на два экрана писать не очень хочется
 

Vladson

Сильнобухер
Ты знаешь почему в книжках (бумажных, старомодных) есть оглавление ???

Создай файл с оглавлением, читай его с помощью file_get_contents а потом с помощью fopen читай свой 7мб файл не весь, а только нужные места !!!

Так собственно и работает СУБД, по этому собственно лучше не изобретай велосипед, а юзай тупо его.
 

Фанат

oncle terrible
Команда форума

Сашка

Новичок
Ты знаешь почему в книжках (бумажных, старомодных) есть оглавление ???

Создай файл с оглавлением, читай его с помощью file_get_contents а потом с помощью fopen читай свой 7мб файл не весь, а только нужные места !!!

Так собственно и работает СУБД, по этому собственно лучше не изобретай велосипед, а юзай тупо его.
Ты знаешь почему в книжках (бумажных, старомодных) есть оглавление ???

Создай файл с оглавлением, читай его с помощью file_get_contents а потом с помощью fopen читай свой 7мб файл не весь, а только нужные места !!!

Так собственно и работает СУБД, по этому собственно лучше не изобретай велосипед, а юзай тупо его.
В принципе, к этому варианту и склонялся, но надеялся, что можно обойтись. Спасибо, буду свой велосипед делать
 
Сверху