You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Golang中获取DynamoDB项目汇总的条目数(非Scan方式)

获取DynamoDB表的汇总指标(每6小时更新)

要获取DynamoDB表的条目数、表大小及平均条目大小这些每6小时更新的汇总指标,无需使用Scan操作,直接调用DescribeTable API即可。该API返回的表元数据中包含这些预计算的聚合值,不仅效率更高,还不会消耗表的读取容量。

实现代码

首先定义一个结构体来封装所有需要的汇总指标:

type TableSummary struct {
    ItemCount       *int64   // 条目数
    TableSizeBytes  *int64   // 表总大小(字节)
    AverageItemSize float64  // 平均条目大小(字节)
}

然后实现获取汇总指标的函数:

import (
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/service/dynamodb"
)

func GetTableSummary(tableName string) (*TableSummary, error) {
    dynamodbClient := createDynamoDBClient()

    // 调用DescribeTable API
    descResp, err := dynamodbClient.DescribeTable(&dynamodb.DescribeTableInput{
        TableName: aws.String(tableName),
    })
    if err != nil {
        return nil, err
    }

    tableDesc := descResp.Table
    summary := &TableSummary{
        ItemCount:      tableDesc.ItemCount,
        TableSizeBytes: tableDesc.TableSizeBytes,
    }

    // 计算平均条目大小(避免除以0)
    if tableDesc.ItemCount != nil && *tableDesc.ItemCount > 0 && tableDesc.TableSizeBytes != nil {
        summary.AverageItemSize = float64(*tableDesc.TableSizeBytes) / float64(*tableDesc.ItemCount)
    } else {
        summary.AverageItemSize = 0.0
    }

    return summary, nil
}

使用示例

summary, err := GetTableSummary("your-table-name")
if err != nil {
    // 处理错误逻辑
    panic(err)
}

if summary.ItemCount != nil {
    println("条目数:", *summary.ItemCount)
}
println("表大小(字节):", *summary.TableSizeBytes)
println("平均条目大小(字节):", summary.AverageItemSize)

关键说明

  • DescribeTable API返回的ItemCount和TableSizeBytes是DynamoDB每6小时更新一次的聚合值,并非实时数据
  • 该操作属于DynamoDB的控制平面操作,不会消耗表的读写容量单位(RCU/WCU)
  • 相比Scan操作,此方法性能更优,尤其适用于大表场景

内容的提问来源于stack exchange,提问作者Nicholas Davis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:25:29