Файлы или база данных – сравним?


Вопрос в заголовке передо мной не стоял с самого начала карьеры веб программиста. Только свой самый первый проект (городской портал) я начал делать, используя текстовые файлы как аналог базы данных. В дальнейшей работе все мои проекты в интернете использовали только базы данных (Mysql). Но вот последний мой заказчик предупредил о невозможности работать с БД – какие-то там проблемы с 1C. Ну что ж, желание заказчика закон, будем делать так. Итак, попробуем сравнить разработку проекта на файлах и базе данных.



Итоги

Здесь краткая выжимка, если вам лень читать все. Отличия хранения в файлах от баз данных:

  1. Необходимо самому реализовывать способы работы с информацией в файлах – например, поиск значения.

  2. При больших объемах файлов (данных) приходится усовершенствовать эти способы, так как если объем файла превышает 10 тысяч строк, то уже начинаются проблемы с копированием его в массив/память.

  3. Систему с БД (sql) можно легко перенести на другой хостинг/сервер – только не забыть про строку подключения. А вот в файлах даже относительные пути на другом сервере могут внезапно начать вести себя по-другому.

  4. Есть разные мелочи, например, необходимо не забывать про блокировку файла при записи или убирать концы строк при сравнении значений (а также добавлять их при записи).
То же самое подробнее и конкретно

Теперь немного о конкретной задаче (надеюсь, заказчик не будет в претензии – я не раскрою никакой секретной и персональной информации). Необходимо было создать что-то типа веб-интерфейса, более удобной обертки, чем предоставляется компанией по проверке мобильных номеров на доступность. Берем их API и создаем свою админку. Задача несложная, при наличии библиотеки для запросов решается быстро. Но вот тут начались головняки с файлами.

Итак, каким образом лучше хранить информацию в файлах? Самое простое и очевидное решение – это построчно. Отдельная строка – это аналог строки в базе. Слова в строке (отдельные ячейки) разделять специальным символом, предположим точкой с запятой. То есть формат одной строки будет такой:

task.txt;1;5;51;32
Первое – название файла, второе – ид, третье – статус работы, четвертое – число номеров, пятое – число проверенных номеров. Первая проблема, с которой вам придется столкнуться – это как читать такие данные. Есть удобная функция, преобразующая файл в массив:

$mass  = file($file);
Но попробуйте запустить её, скажем для файла с сотней тысяч строк – будете удивлены. Тут даже увеличение памяти может не помочь. А ведь нам еще надо сделать из этого массива другой массив, то есть разбить каждую строку по разделителю:

for ($j=0; $j<count($mass); $j++){	
$task = explode(";", $mass[$j]);
//здесь работаем с массивом task
}
Следующая неожиданность – это наличие конца строки. Последний элемент массива task будет содержать спецсимволы, которые надо убрать перед началом работы:

$mass[$j] = str_replace(array("\r","\n"),"",$mass[$j]);
Для того, чтобы осуществить поиск по файлу, надо будет искать в массиве соответствие. И заменить один элемент массива task не получится без ухищрений. А чтобы заменить строку, надо будет располагать всеми предыдущими данными:

$mass[$_GET["j"]] = $_GET["fil"].";".$_GET["id"].";6;".$_GET["co"].";0\n";
file_put_contents($file, $mass, LOCK_EX);
Также не стоит забывать флаг LOCK_EX – чтобы никто другой не помешал нам писать в файл.

Переносимость базы и файлов

Перенести проект c SQL несложно – экпортировать-импортировать и подправить строку подключения. В большинстве случаев этого достаточно. А вот с файлами проблемы могут быть как с путями, так и со специальными функциями, которые используются для их парсинга – банально могут не совпадать версии PHP хотя бы.

Еще немного

Конечно, и при работе с MySQL иногда возникают различные сложности, но после многих лет работы, все уже преодолевается на автомате. В общем, все таки мой выбор – это отдельный сервер баз данных, понимающий SQL-запросы. А файлы оставим для логирования, к примеру.

Но все данный проект – это неплохой опыт. Пользуясь случаем, хочу сказать, что и вы можете обратиться ко мне для написания любого веб сервиса – за умеренную плату и в короткие сроки я вам помогу.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, личное, базы данных, php, работа с информацией




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Введение в сжатие данных
Тест на JS и PHP на гитхабе
Первые шаги с WP-Shop, или простой интернет-магазин на вп за полчаса