高级概述,使用简单的整数order
值来表达我的观点:
id (primary) | order (sort) | attributes ..
----------------------------------------------------------
ft8df34gfx 1 ...
ft8df34gfx 2 ...
ft8df34gfx 3 ...
ft8df34gfx 4 ...
ft8df34gfx 5 ...
通常很容易更改order
(例如,如果用户在前端拖放列表项):轮换项目,计算新的order
值并更新数据库中受影响的项目新order
。
约束:
我最初的想法:
将纪元用作order
并添加一些独特的内容,以避免重复的纪元时间,例如<epoch>#<something-unique-to-item>
。初始值是插入时间(因此默认顺序是最新的)。
客户端/服务器(计算order
的任何人)知道其所有项目子集中每个项目的纪元。
如果项目被移动,请查看上一个和下一个项目的时期(如果有上一个或下一个 - 可以移到第一个或最后一个),在两者之间选择一个值并更新。超过1班?重复这个过程。
可是..
这甚至可能吗?我应该将哪种类型/值用作order
?
答案 0 :(得分:0)
DynamoDB不允许为特定项目更改主分区和排序键(要更改它们,需要删除项目并使用新键值重新创建),所以你可能会想要使用本地或全球二级索引。
假设您提到的分区/排序键是二级索引,我建议为订单存储自然数(1,2,3等),然后根据需要更新它们。
实际上,您需要考虑三种情况: