1000 записей (приложений) в один файл с помощью SplFileObject

«Receiver.php» файл получает ± 1000 Ajax-запросов в секунду с $array данные, которые записаны с помощью следующего кода в file.csv:

$file = new SplFileObject( __DIR__ . 'file.csv', 'a' );
$file->fputcsv( $array, "|", "'" );
$file = null;

Вопросы:

  1. Будут ли данные каждого запроса правильно добавлены в файл .csv? Или, если некоторые запросы совпадут в момент записи, данные этих запросов будут потеряны из-за «блокировки файлов»?

  2. Что произойдет, если в то же время, когда эти 1000 запросов в секунду записывают в файл file.csv — другой процесс, инициированный службой cron, включится и начнет читать file.csv? Будут ли эти 1000 запросов продолжать добавлять данные в file.csv или пока процесс cron будет работать с file.csv — эти 1000 запросов будут «врезаться в стену» и данные не будут вставлены, потеряны?

В целом — мне просто интересно, могут ли быть потери данных в таких случаях или нет?

1

Решение

Php не блокирует файл по умолчанию [если я не ошибаюсь] вы можете заблокировать файл с помощью php стадо() функция.

документы на стадо ()

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

Однако существует проблема, если время http-запроса истекает до снятия блокировки файла. Но вы можете предотвратить это, установив следующие конфиги envirement.

 set_time_limit(0); //sets timeout for runnin the script to unlimited.
ignore_user_abort(); //prevents user from aborting the request once started

Однако 1000+ запросов в секунду кажется, что этот подход приближается к своей жизнеспособности. И я бы предложил использовать систему очередей для входящих данных и отделить обновление файла от входящих запросов.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]