【发布时间】:2017-02-22 14:40:13
【问题描述】:
我正在使用 AWS Redshift 执行分析查询。查询进行一些计算并更新键的值。该结果被导出到队列系统以供异步客户端使用。但是,由于排队系统不保证顺序,我需要一种机制来确定顺序。我需要像“update_version”列这样的东西,它在每次更新操作中都会增加。这类似于optimistic locking。
如何在 redshift 中实现这一点?
一种方法是使用时间戳,但它不可靠,因为时间戳是从集群中的各个节点获取的,并且容易出现clock skew。
我不需要全局排序。
注意:请不要建议使用有序队列,因为有不同的挑战超出了这个问题的范围。
【问题讨论】:
-
如果两个进程同时更新一个键的值,为什么一个比另一个更正确?换句话说,如果您的队列工作人员丢弃了任何比最近处理的消息更早的新消息,时钟偏差会产生什么不同?
-
此外,即使给定数据点的值可能分布在多个节点上,也只有选择运行更新查询的工作节点上的时钟才会计算在内。对于给定更新,各个节点存储中的所有时间戳值都是相同的。
标签: amazon-web-services database-design versioning amazon-redshift