将潜在的大型项目集合放在单个分区中可能会导致分区热。理想情况下,你选择的分区键会在各个分区之间平均分配数据。但是,关于如何实现这一点可能并不总是很清楚。
你可能会考虑在写入时将大分区分成较小的分区(aka写分片),并在读取时将其重新组合。例如,在创建GSIPK时,你可以在分区键中引入1到4之间的随机生成的整数:
你的GSI看起来像这样
现在,你的用户数据可以更均匀地分布在各个分区中。从表中读取用户时,你将一次从所有分区中拉出。可以并行执行此操作以提高性能。
在此示例中,我选择了一个随机数以将数据“分片”到单独的分区中。但是,你的数据可能更适合自然划分(例如,按国家/地区,启用状态,时区等)。我要强调的是,跨分区分配数据的策略可以与用于支持应用程序访问模式的数据模型分开。
了不起。这是针对拥有200-300名员工的公司。我还需要写共享吗?我认为数量并不是很大。如果我仍然需要它,那么对于200至300个用户而言,合适的分片数量(4或5或更多?)是多少?
大小是一个考虑因素,几百个很小。速度是另一个重要的考虑因素(例如,您读/写用户的频率)。如果不经常访问此访问模式,那么我不会太在意热分区。