首页 > 解决方案 > DynamoDB 访问字典中的项目

问题描述

我开始将 dynamoDB 与 python 一起使用,但我怀疑我在网上找不到答案。我有一个这种格式的 JSON:

{
"version": "1.0.0",
"trips":[
       {
        "paymentMode": "ONLINE",
        "type":"A",
        "locations":{
            "name": "Zona A",
            "payment":1000
            "company": ["XXX", "YYY"]

        },
        
       {
        "paymentMode": "CASH",
        "type":"B",
        "locations":{
            "name": "Zona D",
            "payment":200
            "company": ["XXX", "YYY"]
        }
    ]
} 

我可以直接存储它,但我不知道是否有一种方法可以在 get_item 操作或类似操作中单独访问行程中的每个元素?例如,将 paymentMode 和 type 作为主键和排序键,即使它们位于“trips”字段内。

输入将是这样的 Json,但我想将这些字段作为 PK(考虑到它们是唯一的),所以我只能检索一个项目。

我知道您可以只扫描所有内容,然后迭代旅行,但也许有更多元素,这将花费太长时间。有没有办法直接做到这一点?如果是这样,我该怎么做?dynamoDb 会自动执行此操作,还是我必须将其命名为 trips.PaymentMode 或类似名称?

非常感谢

标签: pythonamazon-dynamodbdynamodb-queries

解决方案


在设计如何在数据库中构建数据时,您需要考虑 A) 您存储的数据 B) 您将如何访问数据。

此外,您需要考虑问题中数据库的特征。对于 DynamoDB,主要约束是您的主键。主键要么是分区键,要么是分区键和排序键的组合,并且对于所有项目必须是唯一的。

虽然还不完全清楚,但根据您的 JSON ,您的项目是带有 fieldspaymentMode和. 如果这些是您在项目上的字段,那么您的键应该是什么?您提到使用and ,但是,这些可能不合适,因为它们可能不是唯一的。如果您有与这些相关的时间,则时间的主键和排序键可能会为您完成这项工作,但这取决于数据量。typelocationspaymentModetypepaymentMode_type

您最好做的事情是为每个项目(例如 a uuid)分配一个唯一标识符,并在要用于查询的字段上添加二级索引(paymentMode, type)。这将使您无需扫描整个数据库即可高效查询。但请记住,您将为二级指数产生额外费用。


推荐阅读