Сашка
Новичок
Возникла необходимость хранить данные в текстовой БД. (СУБД использовать не актуально, т.к. данных не очень много).
Начал думать над тем, как лучше хранить, как вытаскивать из файла. Начал тестить на время и потребление памяти. Тестился файл на 7Мб (10 000 строк)
Самыми лучшими вариантами оказались классические - fopen и file_get_contents
Сериализация - это какая-то хрень, которая жрала немеряно ресурсов и при этом медленная, поэтому от этого отказался сразу.
file_get_contents + preg_match = отличная связка (самая быстрая, чтобы отыскать нужную строку). Но! Проблема в потреблении памяти. Т.е. он весь файл грузит в память. Это прекрасно отображает функция memory_get_usage
Fopen + fgets() - медленнее в разы (если нужная строка не в первых 500 строках), но при этом memory_get_usage показывает, что потребление памяти вообще мизерное.
Я в этом не разбираюсь, прочитал, что fopen - хранит дескриптер.
Прошу помощи у знающих - нагрузка на сервер будет одинаковая или нет? Или может построковое считывание - насилие над файловой системой. Потребляет ли фопен действительно мало памяти, или это всего ширма, а по итогам и там и там он все это грузит в память?
Производительность мне, честно говоря, не особо критична (устраивает и та, и та), а вот насчет потребления памяти и нагрузки на файловую систему - не все равно.
Начал думать над тем, как лучше хранить, как вытаскивать из файла. Начал тестить на время и потребление памяти. Тестился файл на 7Мб (10 000 строк)
Самыми лучшими вариантами оказались классические - fopen и file_get_contents
Сериализация - это какая-то хрень, которая жрала немеряно ресурсов и при этом медленная, поэтому от этого отказался сразу.
file_get_contents + preg_match = отличная связка (самая быстрая, чтобы отыскать нужную строку). Но! Проблема в потреблении памяти. Т.е. он весь файл грузит в память. Это прекрасно отображает функция memory_get_usage
Fopen + fgets() - медленнее в разы (если нужная строка не в первых 500 строках), но при этом memory_get_usage показывает, что потребление памяти вообще мизерное.
Я в этом не разбираюсь, прочитал, что fopen - хранит дескриптер.
Прошу помощи у знающих - нагрузка на сервер будет одинаковая или нет? Или может построковое считывание - насилие над файловой системой. Потребляет ли фопен действительно мало памяти, или это всего ширма, а по итогам и там и там он все это грузит в память?
Производительность мне, честно говоря, не особо критична (устраивает и та, и та), а вот насчет потребления памяти и нагрузки на файловую систему - не все равно.