На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

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


Вопрос в заголовке передо мной не стоял с самого начала карьеры веб программиста. Только свой самый первый проект (городской портал) я начал делать, используя текстовые файлы как аналог базы данных. В дальнейшей работе все мои проекты в интернете использовали только базы данных (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, работа с информацией





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




Введение в типы UML-диаграмм
Настройка miniShop2 MODX Revolution: минимальная сумма в заказе


© upread.ru 2013-2021
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.