小编oem*_*oem的帖子

为 DynamoDB 项目创建唯一 ID

我对DynamoDB有疑问,或者更确切地说,如何对表建模。

问题描述:

目标:用户可以保存产品的价格提醒。

例如:当产品 x 的价格低于目标价格时,用户想要保存警报。

我想特别坚持的是:product, userId, targetPrice, operator

运算符可以等于、小于或大于(我会在持久化之前的一个步骤中验证这些值)。

用户可以为同一产品添加多个警报,其中 targetPrice 和/或运营商会有所不同。如果所有这些属性都相同,则不应在数据库中创建重复项。

当然,每个用户的警报应该是完全分开的。

我的主要“阅读”案例是获取产品的所有警报。

我目前的解决方案是将产品作为主键(每当我提到产品时,我都在谈论产品的唯一标识符)和一个 alertId 作为排序键。

alertId 是所有属性的组合键:product:userId:targetPrice:operator

例如:greatBook12:1234:34:lesser

这是节点中用于持久化警报的一些示例代码:

const params = {
  TableName: TABLE_NAME,
  Item: {
    userId,
    alertId: `${product}:${userId}:${targetPrice}:${operator}`,
    product,
    targetPrice,
    operator
  },
  ReturnValues: 'ALL_OLD'
};
docClient.put(params) // ...
Run Code Online (Sandbox Code Playgroud)

我的问题:

像这样滥用排序键感觉有点不对。虽然它确实涵盖了我的所有要求(没有重复,阅读很容易并且应该相对较快),但我想知道是否有更好的方法来做到这一点。也许与指数或类似?

我有点喜欢平面数据结构(只是表中的项目),但也许有另一种方法可以为不同的 targetPrices/operators/products/users 创建独特的警报而不创建重复?

所以我想我的问题是:在满足我正在处理的要求的同时,有没有更好的方法来做到这一点?

非常感谢您提前!

node.js amazon-dynamodb aws-sdk

5
推荐指数
1
解决办法
614
查看次数

标签 统计

amazon-dynamodb ×1

aws-sdk ×1

node.js ×1