卷曲在交易中

时间:2018-07-22 08:21:20

标签: php mysql sql mariadb

我正在使用google client API来获取实例的状态以进行本地数据库复制。

可能有多个脚本更新了我的本地副本。我可以获取数据,并且当数据传输回我的服务器时,其他一些脚本将修改数据。从原始读取中存储数据后,将创建丢失的更新。

因此,在进行更新时,我需要使用事务来阻止所有其他流量到我的表

这是获取代码:

<?php
require_once './gcloud/vendor/autoload.php';

$client = new Google_Client();
$client->setApplicationName('Google-ComputeSample/0.1');
$client->useApplicationDefaultCredentials();
$client->addScope('https://www.googleapis.com/auth/cloud-platform');

$project = 'project_id';  // TODO: Update placeholder value.
$zone = 'us-east1-b';  // TODO: Update placeholder value.
$instance = 'instance-1';  // TODO: Update placeholder value.

$mysqli = new mysqli($hn, $un, $pw, $db);
$mysqli->begin_transaction();

$listInstancesJSON = $service->instances->listInstances($project, $zone, []);

//store it

$mysqli->commit();

发出请求时阻塞表听起来像一个可怕的主意。我想我将在脚本的开头添加ini_set('max_execution_time', 5);,以防万一获取失败(我想他们使用curl)。如果执行时间超过5秒,即使脚本终止后,我的表(或数据库)是否仍会阻塞?我还应该实施其他防御机制吗?

我计划每分钟作为一次cron作业运行此代码。

1 个答案:

答案 0 :(得分:0)

听起来listInstances需要等价于

SELECT ... FOR UPDATE
相关问题