我需要在 DynamoDB 中临时存储一些更改跟踪数据。
最初我认为具有以下属性:
属性:
recordId(字符串):实体的标识符。
lastTimestamp(数字):最后一次更改的时间戳。
changes(字符串):包含更改详细信息的 JSON 字符串。
{ 变化: [ { 时间戳:'2024-04-01 16:14:23',用户:11111,属性:'库存',原始:'0',当前:'1.5'}, { 时间戳:'2024-04-01 16:14:23',用户:11111,属性:'assetId',原始:'123455',当前:'223344'}, { 时间戳:'2024-04-01 17:20:01',用户:2222,属性:'成本',原始:'1.5',当前:'1.0'}, ] }
我不是在表中创建新对象,而是通过 recordId 获取项目并附加到 json 属性“更改”新项目。
上面的问题是,如果我想按每个更改的时间戳进行过滤,我认为性能不是那么好,因为该时间戳存在于每个更改数组项中。
所以现在我正在考虑拥有这些属性:
属性:
在上面,我必须为每次更改创建一个新的 DynamoDB 记录。
值得一提的是,TTL 将设置为大约 3 个月后到期。
您认为哪种场景更好?
第一种方法确实会减少写入,但缺点是在属性级别按时间戳进行过滤将是一个问题。
第二个执行大量写入操作,但按时间戳查询的性能会更高。
第二种方法效率更高。
第一种方法不会执行更多写入操作,而是执行相同数量的写入操作。
第二种方法可确保您不会达到 400KB 的最大项目大小,同时还允许您更有效地读回数据。