gpt4 book ai didi

python - DynamoDB 复合主键在系统内移动的最佳实践(分区键和排序键)

转载 作者:行者123 更新时间:2023-12-04 08:33:34 36 4
gpt4 key购买 nike

我在一个系统上工作,我将数据存储在 DynamoDB 中,并且必须按时间顺序排序。对于 partition_key我有一个 id (uuid) 和 sort_key我有一个 date_created值(value)。现在最初只使用 ID 保存唯一条目就足够了,但是随后出现了一个问题,即这些数据没有按照我想要的方式进行排序,因此添加了一个 sort_key。
使用 python boto3 库,我只使用 id 主键来获取、更新或删除项目就足够了,因为我知道它总是唯一的:

import boto3

resource = boto3.resource('dynamodb')
table = resource.Table('my_table_name')

table.get_item(
Key={'item_id': 'unique_item_id'}
)
table.update_item(
Key={'item_id': 'unique_item_id'}
)
table.delete_item(
Key={'item_id': 'unique_item_id'}
)
但是,DynamoDB 也需要提供排序键,因为主键由分区键和排序键组成。
table.get_item(
Key={
'item_id': 'unique_item_id',
'date_created': 12345 # timestamp
}
)
首先,使用排序键按时间顺序对数据进行排序是正确的方法还是有更好的方法?
其次,在整个系统中传输分区键和排序键的最佳方法是什么?例如,我有一个接受 ID 的 API 端点,后端通过此 ID 执行 get_item查询并返回相应的数据。现在因为我还需要排序键,我正在考虑在内部使用散列算法,在那里我会像这样散列一个 JSON:
{
"item_id": "unique_item_id",
"date_created": 12345
}
然后一个单一的值成为这个数据库条目的标识符。然后我会在执行任何数据库查询之前对这个值进行去哈希处理。这种方法常见吗?

最佳答案

First of all, is it the right approach to use sort key to sort data chronologically


排序键是在 DynamoDB 中对数据进行排序的手段。使用时间戳作为排序键字段是正确的做法,也是 DDB 中的常见模式。

DynamoDB requires a sort key to be provided ... since primary keys are composed partition key and sort key.


这是真的。但是,当从 DDB 读取时,可以使用 query operation 仅指定分区键。 (与需要完整主键的 get_item 操作相反)。这是一个强大的构造,可让您指定要从给定分区读取的项目。
您可能需要查看 KSUID 以获得您的唯一标识符。 KSUID 类似于 UUID,但它们包含时间组件。这允许它们按生成时间排序。 python中有几个KSUID库,不需要自己实现算法。

关于python - DynamoDB 复合主键在系统内移动的最佳实践(分区键和排序键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64912791/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com