python - 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 或类似名称?
非常感谢
解决方案
在设计如何在数据库中构建数据时,您需要考虑 A) 您存储的数据 B) 您将如何访问数据。
此外,您需要考虑问题中数据库的特征。对于 DynamoDB,主要约束是您的主键。主键要么是分区键,要么是分区键和排序键的组合,并且对于所有项目必须是唯一的。
虽然还不完全清楚,但根据您的 JSON ,您的项目是带有 fieldspaymentMode
和. 如果这些是您在项目上的字段,那么您的键应该是什么?您提到使用and ,但是,这些可能不合适,因为它们可能不是唯一的。如果您有与这些相关的时间,则时间的主键和排序键可能会为您完成这项工作,但这取决于数据量。type
locations
paymentMode
type
paymentMode_type
您最好做的事情是为每个项目(例如 a uuid
)分配一个唯一标识符,并在要用于查询的字段上添加二级索引(paymentMode
, type
)。这将使您无需扫描整个数据库即可高效查询。但请记住,您将为二级指数产生额外费用。
推荐阅读
- java - 将数组加载到列表中,但它与新内存重复(Java)
- firebase - 未找到合适的运行配置
- c# - 从ini文件向exe传递参数
- c++ - 当 EXCEPT_CALL ::Times() 时 gmock 不计算呼叫
- reactjs - 如何在 router.query 之后运行 GraphQL 查询?
- python - Django DayArchiveview is not detected in urls.py
- mongodb - 根据硬编码条件过滤数据 (MongoDB)
- c# - Boxcast 在 Unity 中无法与 Capsule Collider 2D 一起使用
- c++ - “引用数组”类型的表示法
- c# - Powershell调用无效的命令输出C#