【问题标题】:How can I get the total number of calls to my dynamodb table?如何获得对我的 dynamodb 表的调用总数?
【发布时间】:2021-03-22 09:00:06
【问题描述】:

我正在使用 AWS Lambda。我创建了一个对我的 dynamoDB 表执行 get 操作的 lambda 函数。根据我传递给这个 get 函数的 id(主键),它应该以 JSON 格式返回正确的项目。为此,我正在使用 boto3 中的 get_item 函数:

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.get_item

所以通常情况下,如果通过指定和 ID 通过 API(从 API 网关创建)调用我的 lambda 函数,我应该得到相应的项目。问题是我还需要获取检索结果的次数。例如,如果这是我第七次调用我的 lambda 函数,我应该得到一个项目(仍然取决于 id)和索引 7,如下所示:

{
  "7":{
        "id" :1246 ,
        "toy":"car",
        "color": "red"
      }
}

从逻辑上讲,我调用 lambda 函数的次数就是我调用 dynamoDB 的次数。比我认为获得这个数字的正确方法可能是使用 dynamodb,但我已经花了几个小时试图找到一种方法来通过到处查看来获得这个数量的事件/呼叫到我的桌子......我该怎么做才能得到这个号码 ?以及如何使用 boto3 实现这一点?

【问题讨论】:

    标签: python amazon-web-services aws-lambda amazon-dynamodb boto3


    【解决方案1】:

    没有现成的解决方案来获取 DynamoDb 中表的调用次数。您需要编写一个将在 Lambda 调用之间共享的自定义计数器。

    最简单的选择和最快的解决方案可能是使用 Redis,它是 INCR 操作来执行原子增量。如果您不熟悉 Redis,请查看 doc for INCR operation,特别是 Pattern: Counter 部分。

    如果您只能使用 DynamoDb,则需要在单独的单个项目中维护一个计数器。示例:

    {
      "partionKey": "counter_item",
      "counter": 1
    }
    

    然后你可以像这样执行更新调用来增加计数器:

    response = table.update_item(
            Key={'partionKey': {'S': ':pk'}},
            TableName='your_table_name',
            ReturnValues='ALL_NEW',
            UpdateExpression='SET #counter = if_not_exists(#counter, :default) + :incr',
            ExpressionAttributeValues={
              ':pk': 'counter_item',
              ':incr': 1,
              ':default': 0
            },
            ExpressionAttributeNames={
              '#counter': 'counter'
            }
            )
    

    响应中将有一个更新的项目,因此您可以从中获取counter 字段。 您可以查看this DynamoDb guide 以获得更好的 Python 示例。

    【讨论】:

    • " 你需要在单独的单个项目中维护一个计数器。" 你是什么意思?您是否将其存储在新表中?
    • 一般来说,NoSQL 设计中建议将不同类型的数据放在一个表中。因此,这两种类型的实体都将存储在同一个表中,但具有不同的分区键,它们永远不会重叠。单表设计有很多好处,但也有一些缺点,您可能需要付出一些努力来深入研究这个主题。我可以向初学者推荐 DDB Design Best Practices 文章和 this talk by Rick Houlihan 以深入了解 NoSQL 设计
    • 但是,如果主题听起来对您的情况来说太复杂,那么将这个计数器放入一个新表中是完全可以的。你会失去一些扩展的可能性,但你可能不需要扩展那么多
    【解决方案2】:

    我觉得有很多方法可以找出服务器调用的次数。

    1. 如果您有日志,您可以轻松获取任何特定页面的服务器调用。
    2. 使用 AWS 仪表板获取信息矩阵。 (它有一切,延迟,失败率,调用等)
    3. 编写您自己的函数来计算get、post 和update 调用。 (这将类似于配置文件命中,通常,这用于 项目的初始阶段。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 2011-05-20
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多