zkrvndm
@zkrvndm
Архитектор решений

Как безопасно работать с текстовой базой данных?

На сервере имеется простой текстовый файл, хранящий в себе небольшой JSON.

Данный JSON постоянно перезаписывается и модифицируется различными php-скриптами: с целью добавления новых записей или модификации старых записей. Иногда у меня бывает так, что все данные из него просто исчезают.

Я так понимаю, такие косяки происходят из-за частых перекрестных запросов, которые могут пересекаться и создавать ошибки, при одновременном обращении к файлу. Для чтения использую file_get_contents(), а для записи file_put_contents(), т. е. никаких блокировок и проверок на время работы с файлом я не делаю (в чем моя ошибка).

Собственно, суть моего вопроса в следующем. Как проще всего мне будет организовать безопасную работу с текстовой базой данных? Возможно существуют готовые функции/плагины/библиотеки, где уже учтены все подводные камни?

Не хотелось бы изобретать велосипед, особенно, когда умные люди наверняка придумали все до меня.
  • Вопрос задан
  • 153 просмотра
Решения вопроса 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Рядом с файлом данных создаете лок файл, и если нет лока пишете, если есть обрабатываете по необходимости

https://www.php.net/manual/ru/function.flock.php
LOCK_EX
Ответ написан
inoise
@inoise Куратор тега PHP
Solution Architect, AWS Certified, Serverless
Я, наверное, скажу очевидную вещь, но стоит избавиться от текстового файла и взять уже готовую базу данные вроде MongoDB. В противном случае для обеспечения ACID придется навесить такую же по объемности систему, н несколько лет на разработку у вас вряд-ли имеется. Еще лучше если у вас есть четкая структура данных и вы можете воспользоваться MySQL или PostgreSQL - они создавались под ACID, но эт реляционные базы данных
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Я так понимаю вы в поиске чего-то типа sqlite?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы