php - DynamoDB PHP getItem() - 如何判断项目是否不存在

标签 php amazon-dynamodb

我正在编写一个“获取或创建”方法来尝试获取一个项目,但如果它不存在,它将创建一个全新的版本。显然,我想确定当我尝试获取该项目时该项目不存在,以便它永远不会覆盖现有数据。

我假设 $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/

相关文章:

php - 模型中未定义的属性

node.js - 如何在dynamodb中查询主键值数组

python - botocore.exceptions.NoCredentialsError : Unable to locate credentials

javascript - jQuery 和加载()。无法更改已加载类中的内部 HTML

node.js - DynamoDB.putItem 函数未使用 sls 命令保存项目

node.js - 如何使用 AWS Lambda 按名称查询 dynamoDB 表

amazon-web-services - 如何将 IoT 流数据映射到索引 Dynamo DB 列

php - 使用命名空间时无法使用 require_once 加载类

php - MySQL 查询返回表中未签名的内容不再有效

php - 使用条形码 ID 进行事件管理