Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.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 在Laravel中优化UpdateOrCreate_Php_Mysql_Laravel - Fatal编程技术网

Php 在Laravel中优化UpdateOrCreate

Php 在Laravel中优化UpdateOrCreate,php,mysql,laravel,Php,Mysql,Laravel,我从外部URL下载XML并将其解析为mysql Rate::updateOrCreate([ 'exchanger_id' => $exchangerId, 'signature_from_id' => $signatureFromId, 'signature_to_id' => $signatureToId ], [ 'in' => $item->in, 'out' => $item->

我从外部URL下载XML并将其解析为mysql

Rate::updateOrCreate([
    'exchanger_id'      => $exchangerId,
    'signature_from_id' => $signatureFromId,
    'signature_to_id'   => $signatureToId
], [
    'in'     => $item->in,
    'out'    => $item->out,
    'amount' => $item->amount
]);
问题是XML包含许多项,我解析了许多站点,因此它会导致20-25个URL的20K查询。稍后我将解析大约300个URL,查询的数量将增加

我如何优化这个过程?我指的是
updateOrCreate
部分。如果存在具有
exchanger\u id
signature\u from\u id
signature\u to\u id
的行,我需要更新它,否则创建新行。并对每个xml项重复它

我意识到Laravel至少进行了两次查询:第一次是
选择
,检查行是否存在,第二次是
创建/更新

无法考虑任何批次示例:(

更新

我为前三列(exchanger\u id、signature\u from\u id、signature\u to\u id)创建了一个唯一的复合键,并下载了这个特性


查询数量变为26个(大约20000个)。但处理所有这些问题所需的时间没有改变。我缺少什么…

如果您的业务案例允许,为什么不改为这样做呢

(1) 将所有xml批量存储在应用程序的某个文件夹中


(2) 创建Cron作业,该作业将为您进行处理,并在处理完成时触发一个您可以捕获的事件,以便您可以采取下一步行动?查看调度作业。还可以查看laravel中的队列和事件,以了解更多的先进想法。

如果您的业务案例允许,为什么不改为执行此操作

(1) 将所有xml批量存储在应用程序的某个文件夹中


(二)创建Cron作业,它将为您进行处理,并在处理完成时触发一个您可以捕获的事件,以便您可以采取下一步行动?查看调度作业。还可以查看laravel中的队列和事件,以了解更多的先进思想。

那么,动态插入XML与读取X有什么区别ML文件存储在某个文件夹中。无论如何,我需要插入或更新许多行,无论从何处获取它们:从文件还是从其他地方获取……好吧,区别在于同步操作和异步操作。您可以同时存储文件(读取)然后在用例允许的情况下异步插入DB中的记录。那么,动态插入XML或读取存储在某个文件夹中的XML文件之间有什么区别呢?不管怎样,我需要插入或更新很多行,无论从何处获得它们:从文件还是从其他地方……好吧,区别是同步还是异步NUS操作。如果用例允许,您可以在数据库中异步存储文件(读取)和插入记录。