Я строю масштабируемую систему хранения данных.Количество серверов может иметь сотни одновременных запросов на вставку данных в базу данных MySQL.Я буду писать хранилище данных на каждом веб-сервере локально.Мне нужно иметь возможность записать локальное хранилище каждого веб-сервера в базу данных mysql при достижении порога (триггер).
У меня есть концепция, в которой есть библиотека PHP с использованием неблокирующего метода:добавление отправленных данных в текстовый файл.Демон запускается на каждом веб-сервере.В этом txt-файле накапливаются строки данных (в формате csv) до достижения порогового значения, а затем демон архивирует файл и отправляет его на сервер сбора, который разархивирует данные и вставит их в базу данных.
Мой методдля записи в текстовый файл это что-то вроде:
$fp = fopen($file, 'a+');
stream_set_blocking($fp, 0);
while($count < $loop) {
if (flock($fp, LOCK_EX)) {
fwrite($fp, $text);
}
flock($fp, LOCK_UN);
}
fclose($fp)
Допустим, я пишу демон на сервере, который каждые 2 минуты перемещает текстовый файл на сервер сбора.Я не уверен в точном процессе перемещения файла и начала записи в новый (чистый) файл с одновременными подключениями.
Я думал, что-то вроде демона блокирует файл и копирует его, а затем стирает вседанные из оригинала а потом его разблокирует ???Скопированный файл будет отправлен сборщику через демон.Я не уверен, как это будет вести себя одновременно, если запущена описанная выше запись потокового файла.
Существует ли более эффективное / быстрое / надежное решение, собирающее данные локально и затем перемещающее их в сборщик?
Заранее спасибо!