Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用SplFileObject对单个文件进行1000次写入(附加)_Php_Performance_File_Csv_Splfileobject - Fatal编程技术网

Php 使用SplFileObject对单个文件进行1000次写入(附加)

Php 使用SplFileObject对单个文件进行1000次写入(附加),php,performance,file,csv,splfileobject,Php,Performance,File,Csv,Splfileobject,“receiver.php”文件每秒接收±1000个Ajax post请求,其中包含$array数据,该数据使用以下代码写入文件.csv: $file = new SplFileObject( __DIR__ . 'file.csv', 'a' ); $file->fputcsv( $array, "|", "'" ); $file = null; 问题: 是否将每个请求数据正确附加到.csv文件中?或者,如果某些请求在写入时重合,那么这些请求数据将因为“文件锁定”而丢失 如果在每秒10

“receiver.php”文件每秒接收±1000个Ajax post请求,其中包含
$array
数据,该数据使用以下代码写入文件.csv

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

  • 是否将每个请求数据正确附加到.csv文件中?或者,如果某些请求在写入时重合,那么这些请求数据将因为“文件锁定”而丢失

  • 如果在每秒1000个请求写入file.csv的同时,cron服务启动的其他进程将介入并开始读取file.csv,会发生什么情况?这1000个请求是否能够继续将数据附加到文件.csv,或者在cron进程处理文件.csv时,这1000个请求是否会“碰壁”,数据是否不会插入、丢失


  • 总的来说-我只关心在这种情况下是否会有数据丢失?

    Php默认情况下不会锁定文件[如果我没有弄错的话]您可以使用Phpflock()函数锁定文件

    文件锁定将使进程等待每个锁“释放”,然后再对其启动另一个操作

    但是,如果http请求在释放文件锁之前超时,则会出现问题。但是您可以通过设置以下环境配置来防止这种情况发生

     set_time_limit(0); //sets timeout for runnin the script to unlimited.
     ignore_user_abort(); //prevents user from aborting the request once started
    
    然而,每秒1000多个请求的速度似乎已经接近其可行性。我建议对传入的数据使用查询系统,并将文件的更新与传入的请求分离