我目前正在培养一个技能,这将是一个股票投资组合经理。我希望表有三个标题
1.用户ID(来自Alexa)
1.股票名称
1.库存量
UserID是主键,目前我可以向表中添加股票的数量,然后在一个名为GetPortfolioValue的单独方法中查询数据库,以返回特定UserID的股票名称和股票数量,然后我将对该值进行一些数学运算,以返回Portfolio值。
问题是,我不能在主键下添加另一个条目,因此投资组合中只能有一个股票期权,这很糟糕
我希望以后能够编辑投资组合的情况下,用户出售他们的股票的一部分。
有没有办法使用DynamoDB来实现这一点?
3条答案
按热度按时间unhi4e5o1#
主键必须是唯一的。您可能需要UserID + Stock Name的复合主键。在DynamoDB中,这是通过在主表索引上将UserID设置为散列键,将Stock Name设置为排序键来实现的。
tktrz96b2#
当表具有排序关键字时,您可以拥有多个具有相同主键项如果表只有主键而没有排序关键字,则否如果表具有排序关键字,则每个主键和排序关键字组合必须是唯一
在本表中,PK属性为主键,SK -排序键。
然而主键将被物理地放置在一起,不应该有像“active”和“not_active”这样的主键,而对于该行项只有2个可能的值,并且所有的值都将落在2个空格中。如果你将有很多行具有相同的主键,你将创建查询的热点,并且你可能会遇到查询缓慢。但是讨论如何设计DynamoDB表是一个太宽泛的主题。
你可能会受益于我的文章:https://lukasliesis.medium.com/learning-from-aws-fcb0cc71926b
有两个精彩的视频由Rick Houlihan提到的DynamoDB架构:
我强烈建议观看这两个多次进入DynamoDB的心态,了解查询热图,如何把所有的应用程序到一个表和使用DynamoDB的最佳状态。
更新:自适应容量
可能是DynamoDB中最常见的问题,曾经是。
如果您以前使用过DynamoDB,您可能知道DynamoDB建议构建应用程序以提供均匀分布的流量,从而获得最佳性能。也就是说,您的请求应该均匀分布在主键上。这是因为在自适应容量之前,DynamoDB在分区之间均匀分配读写吞吐量。例如,如果您有一个每秒能够写入400次的表(换句话说,400个写入容量单位,或“WCU”),则每个分割区会配置100个WCU。如果您的工作负载不均匀,其中一个分割区每秒接收超过100个写入(热分割区),则这些要求可能会传回ProvisionedThroughputExceededException错误。
在此处阅读全文:
https://aws.amazon.com/blogs/database/how-amazon-dynamodb-adaptive-capacity-accommodates-uneven-data-access-patterns-or-why-what-you-know-about-dynamodb-might-be-outdated/
toe950273#
是的,假设您使用来自Alexa请求的userId,它们将为您的dynamoDB数据库提供一个很好的主键。
只需针对每个用户将股票存储为JSON对象。
储存对象
以及如何找回它
当用户添加或删除股票时,您需要将其追加到用户的股票数组中。每个DynamoDB项的大小限制为400 KB。给定项的大小包括属性名称(UTF-8格式)和属性值。