Php 在Laravel中优化UpdateOrCreate
我从外部URL下载XML并将其解析为mysqlPhp 在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->
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操作。如果用例允许,您可以在数据库中异步存储文件(读取)和插入记录。