Google App Engine — PHP API облачного хранилища данных — setTransaction ()

Я запускаю php-приложение на google app engine и где-то в коде мне нужно сохранить некоторые данные в облачном хранилище данных (строка 5 здесь):

<?php
$DB = new Database($google_api_config);

foreach ($items as $item) {
$DB->save_entity("kind", item['id'], $data_to_store);
}
?>

И класс:

<?php
class Database {
//other codes...

public function save_entity($kind, $identifier, $values){
$key = $this->create_key($kind, $identifier);

$property_map = [];

foreach ($values as $value) {
$property_value = $this->create_roperty($value[0],$value[2]);
$property_map[$value[1]] = $property_value;
}

$entity = new Google_Service_Datastore_Entity();
$entity->setKey($key);
$entity->setProperties($property_map);

$mutation = new Google_Service_Datastore_Mutation();
$mutation->setUpsert([$entity]);

$req = new Google_Service_Datastore_CommitRequest();
$req->setMode('NON_TRANSACTIONAL');
$req->setMutation($mutation);

$this->dataset->commit($this->dataset_id, $req, []);
}
}
?>

Как вы можете видеть, процесс сохранения находится в цикле и должен очень быстро выполнить несколько запросов Commit. Это работает нормально, но время от времени это не так, и я вижу, что операция была выполнена частично. Некоторые предметы были сохранены, а остальные нет.

Вопрос в том:
Могу ли я выполнить весь цикл foreach в транзакции и убедиться, что все элементы были сохранены? Я также не знаю, как реализовать это в php с помощью API клиентской библиотеки PHP Datastore.

Я не совсем уверен, но как-то так:

//start a transaction
//run the loop
//terminate the transaction

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]