Здравствуйте! На данный момент изучаю бэкэнд, в роле которого выступает php! Вопрос в следующем, я уже добрался до работы с файловой системой, и уже давно я горю желанием сделать небольшой проектик в виде системы обучения персонала на том предприятии на котором я работаю на данный момент! В целом, набор функций по работе с файловой системой в php позволяет сделать пожалуй всё что я хочу, а именно, авторизация пользователя путём создания на сервере файлов вроде userName.json, так-же рейтинг обучающихся, снова опять же с помощью json, тестирование после прохождения обучения ... Если всё "выгорит" (сложится нормально) данной системой будет пользоваться не более 100 человек одновременно! Так вот в чём вопрос... Я уже поэкспериментировал с созданием пользователей, а так-же с запросами на сервер, удалением пользователей, просмотром статистики пользователей, и в целом думаю мне хватит имеющегося функционала пхп за глаза по работе с ф.с.! Вопрос в следующем, очень много читал про то, что нужно работать онли с БД (мол они в 100 раз быстрее), но до работы с БД я не добрался, есть ли смысл делать подобный проект именно так, как я описал с помощью нативной работы с ф.с. в пхп? Или всё такие подобные вещи нуждаются ОНЛИ в базах данных? Подчеркну, это не социальная сеть, это система которой будут пользоваться небольшое количество людей, соответственно запросов будет не много!
Владислав, блэт, что прям на столько всё плохо? Я думал считывать json из файлов это норм, и отправлять его пользователю... ? + на серваках же явно помощнее стоит оборудование...
Muranx, я не знаю каких объемов у тебя будут json файлы. поэтому сразу сказал для больших данных нужен хороший ssd.
Возьми и напиши тесты заполни файл попробуй его считать 1000 раз посмотри как будет работать
Для правильного вопроса надо знать половину ответа
Можно и с файлами, но тогда надо самому заботиться о состоянии гонки и блокировках.
Представьте простую ситуацию, практически одновременно приходят два запроса, изменяющих один и тот же файл. Может получиться следующая ситуация:
- скрипт A читает файл
- скрипт B читает файл
- скрипт A записывает изменения в файл
- скрипт B записывает изменения в файл, изменения, сделанные скриптом A, затёрты.
В базах данных с этим проще, есть атомарные изменения, транзакции и блокировки строк/таблиц. В файловой системе вы можете только заблокировать файл целиком на время работы с ним скрипта.
Rsa97, слушай, будь добр если будет время ещё подскажи... А если допустим я сделаю такую структуру, что одновременные запросы на изменения файлов в проекте будут невозможны (ну есть задумки), можно будет реализовать такую систему? Или вот ещё вопросик, ты сказал про минус одновременного изменения файлов, а по поводу чтения файлов ? ..на это ограничений нет? допустим если 100 юзеров с разных аккаунтов будут запрашивать .json файл статистики, они же не будут ждать в очереди?
Muranx, Если файлы будут открываться только на чтение, то проблем никаких.
А вот последовательность "чтение - изменение данных - запись" должна идти с обязательной блокировкой файла при открытии и разблокировкой его только после окончания записи, даже если скрипт читает данные в самом начале, а записывает их только в самом конце работы. Все остальные скрипты должны ждать освобождения файла.
При этом ещё легко поймать дедлок:
Скрипт A открывает и блокирует файл 1
Скрипт B открывает и блокирует файл 2
Скрипт A пытается открыть файл 2 и ждёт его освобождения
Скрипт B пытается открыть файл 1 и ждёт его освобождения
И ждать они будут, пока время работы скриптов не истечёт.