【发布时间】:2018-10-17 04:42:27
【问题描述】:
我在 DynamoDB 中有一个 customer 表,其中包含 name、dob、zipcode、email 等基本属性。我想向其中添加另一个属性,该属性将随着时间的推移而不断增加。例如,每次用户单击产品(项目)时,我都想将其添加到记录中,以便在customerId 索引的单个值中获得客户资料的完整快照。因此,我的新属性将被称为 viewedItems 并且将是查看的 itemIds 列表(连同时间戳)。
但是,鉴于 DynamoDB 值的 4KB 大小限制,随着我不断将点击的产品添加到客户资料中,它将随着时间的推移而被超越。
我怎样才能最好地定义我的对象以执行以下操作?
通过
customerId访问客户的完整资料,包括查看次数。客户的访问时间过滤配置文件(如自过去 N 天以来的所有交互),在这种情况下,应按给定时间范围过滤查看的项目。
使用
viewedItems上的时间过滤器扫描整个表。查询需要高效,因为可以在请求时提取配置文件。
能够更新单个客户记录(例如,通过批处理作业,在需要时更新每个客户的记录)。
一种方法是创建一个不同的表(例如customer_viewed_items),其中包含哈希键customerId 和范围键timestamp,其值为客户查看的itemId。但这看起来是一个越来越复杂的模式——更不用说访问该项目所涉及的成本的两倍了。如果我必须根据(比如说)“购买”的物品创建另一个属性,那么我需要创建另一个表。所以,我想到的解决方案对我来说似乎并不好。
如果您能帮助提出更好的架构/方法,我们将不胜感激。
【问题讨论】:
-
通常,我会说这听起来像是 RDBMS 的工作,但大概你有理由不走那条路。
标签: amazon-web-services database-design amazon-dynamodb schema