我正在编写一个“获取或创建”方法来尝试获取一个项目,但如果它不存在,它将创建一个全新的版本。显然,我想确定当我尝试获取该项目时该项目不存在,以便它永远不会覆盖现有数据。
我假设 $result["Item"] === null
当且仅当该项目在发生时数据库中不存在要求?也就是说,如果该项目在请求之前就已存在,那么无论 API 错误等情况如何,此条件的计算结果是否始终为 false?或者还有其他我应该检查的东西吗?
$result = $this->client->getItem(
array(
"TableName" => $tableName,
"Key" => array(
$keyName => array(Type::STRING => $key),
)
)
);
if ( $result["Item"] === null )
{
//Item does not exist; create it and write it to dynamoDb (code not shown)
}
return $result["Item"];
最佳答案
我会添加 'ConsistentRead' => true
以确保您的读取获得绝对的、最新的数据。
你仍然会在这里有一个潜在的竞争条件,如果多个进程试图获取该项目并发现它不存在,那么他们都会尝试写入该项目,但只有一个进程不会拥有它数据破坏。只要它们不会写入不同的数据,就没有关系。
关于php - DynamoDB PHP getItem() - 如何判断项目是否不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18324243/