如何在dynamoDB,嵌套字典或多个项目中构建数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在dynamoDB,嵌套字典或多个项目中构建数据?相关的知识,希望对你有一定的参考价值。

我从自动化测试生成的XML聚合,我在lambda函数中使用python来解析XML并创建dynamoDB项。

最后,我需要每个测试的日期运行测试持续时间,并将计算一些基本的统计数据,如mean,stdev等。

目前,我使用的是非常扁平的结构:

{
  "testName": string
  "result": "SUCCESS",
  "testEndedAt": timecode,
  "testStartedAt": timecode,
  "testRunID": string,
  "timeAdded": time,
  "totalTime": number
}

每次测试运行都会生成一个具有相同测试名称的新项目。

我使用testName和testrunID作为主键和排序键。

我有一种感觉,就是我做某事的方式效率低下。我正在考虑转移到这样的数据结构:

{
    testname:string,
    tests:[
            {
                timeAdded:timeStamp
                testRunId:string,
                testStartedAt:number,
                testEndedAt:number,
                totalTime:number
            }
            {
                timeAdded:timeStamp
                testRunId:string,
                m__testStartedAt:number,
                m__testEndedAt:number,
                totalTime:number
            }
    ],
    stats:{
        mean:number
        stDev:number
        maxExpectedTime:number
    }
}

我认为这种方法有几个优点。

我将计算出的统计数据存储在表格中我可以使用测试名称和唯一键我不必扫描整个数据库来计算统计数据等

对此我没什么经验,我不知道如何最好地处理这个问题,更不用说回答它了。

谢谢您的帮助!

答案

您可以继续使用原始结构:

{
  "testName": string
  "result": "SUCCESS",
  "testEndedAt": timecode,
  "testStartedAt": timecode,
  "testRunID": string,
  "timeAdded": time,
  "totalTime": number
}

这样,您可以轻松查询(不扫描)特定testName的结果。您可以对结果数据进行聚合操作,并将其保存回具有不同GSI的同一个表。 (分区键为testName)。

{
  "testName": string
  "mean": "number",
  "stDev": number,
  "maxExpectedTime": number
}

如果您希望这些聚合统计信息是实时启用,并将此表的流发送到lambda函数。根据新数据增加这些计数。

以上是关于如何在dynamoDB,嵌套字典或多个项目中构建数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Go 中从 DynamoDB 表中删除多个项目

dynamoDB 的 CloudFormation 模板不起作用:一个或多个参数无效

使用条件更新集合中的DynamoDB嵌套映射

如何从获取请求数组结果中构建字典?

DynamoDB - 如何计算查询的读取吞吐量

具有多个标签的 DynamoDB 查询