对于特定的分区键,我需要在表中放置一个具有最小范围键的项目。
例如。如果我的桌子已经有这四个项目 (分区键,范围键) - (1,1)(1,2)(1,5)(2,1) 我想为分区键1添加一个项目,然后我将(1,3)放入表中。
我可以做的一种方法是查询所需分区键的所有范围键。但我想这将是一次非常昂贵的操作。
还有其他更好的方法吗?
答案 0 :(得分:0)
在不知道有关数据的任何其他内容的情况下,没有更好的方法来查找第一个可用的未使用的排序键。
请注意,SQL数据库已多次询问此常规问题(查找最少未使用的整数索引)。虽然SQL提供了各种方法来查找未使用的键(左外连接,相关子查询,存储过程),但性能绝不会像您提议的那样扫描索引空间。
要更快地找到密钥,您需要事先知道分区中可用的排序密钥。这可能涉及创建和维护某种可用空间列表(可能在单独的Dynamo表中)。为任何分区创建空闲列表都需要扫描其所有排序键,但后续插入操作可以查阅空闲列表以更有效地查找下一个可用键。当然,您必须保持免费列表最新的任何插入和&删除。
最后,请花点时间考虑一下您的解决方案将如何受到并发性和DynamoDB的乐观锁定策略的影响。如果多个进程同时写入同一个分区,则在您进行插入时,找到它时可用的排序键值可能不可用。