我们正在使用DynamoDB构建游戏。我们有大约50,000件物品的清单。这些可以作为游戏的一部分分配给组。大约有30个团体。我们需要按组和项目跟踪组的数量。
我已经建立了一个结构,其中每个项目都有一个结构,并且该结构可能包含其中的每个组,包含一个可以递增的数字,所以它看起来像这样:
{ItemId: XYXYSY,
Groups:{X:5,Y:10}
}
哪种方法效果很好。我当然可以这样做的另一种方法是将分组写到一个单独的表中:
{ItemID: XYSYSY, Timestamp: 12334567, Group: X}
所以,我要么需要在第一种模式下递增计数器,要么每次都用第二种模式写出一条新记录。
第一个意味着更少的数据,以及稍后用Item检索信息的一个很好的包。第二个可以无限增长,而且更简单。
在某些时候,我必须检索整个事物并将其导出,或者以增量方式进行。
我一直在关注迪纳摩的性能模型,而我正在试图弄清楚我是否会让自己陷入第一个模型的麻烦之中。每个记录包含少量数据的50,000个密钥不会分布在很多分区上。同时,因为它是一个相对较小的数据集,只按项目ID检索,并按项目ID更新,所以它应该非常快。而对于第二个模型,如果游戏变得非常受欢迎,那个桌子就会变得疯狂,并且它仍然只是基于相同的50,000个密钥。我可能会将时间戳添加为范围键。
任何关于什么会随着时间和负荷而变得更加高效的想法将会非常受欢迎,甚至是完全不同的方法。
答案 0 :(得分:0)
数据大小不是决定分区数量的唯一因素。如果分区很大,您的吞吐量分配也会影响分区数。两种数据模型都是这种情况。例如,如果在新表上配置3000 rps和3000 wps,则在创建它时将有4个分区,分配给每个分区750 wps和750 rps。
假设您使用第一个模型,此配置将允许您以每秒750个事务更新单个ItemId,并在所有项ID中每秒更新总计3000个事务。
从这一点来看,您似乎需要弄清楚您的负载模式,以进一步确定第一个数据模型和上面的配置是否合适。昼夜计划,持续与突发负载,一次读取多次写入以及多次读取多次写入等模式都会影响您对数据模型的选择。