我正在使用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作业运行此代码。
答案 0 :(得分:0)
听起来listInstances
需要等价于
SELECT ... FOR UPDATE