我正在使用AWS Redshift执行分析查询。查询执行一些计算并更新键的值。此结果将导出到队列系统以供异步客户端使用。但是,由于排队系统无法确保排序,我需要一种机制来确定顺序。我需要类似“update_version”列的东西,它在每次更新操作中都会增加。这类似于optimistic locking。
如何在红移中实现这一目标?
一种方法是使用时间戳,但它不可靠,因为时间戳是从群集中的各个节点获取的,并且易于clock skew。
我不需要全球订购。
注意:请不要建议使用有序队列,因为这个问题的范围不同。
答案 0 :(得分:1)
您可以执行以下操作之一:
new QueryOptions(CommonFileQuery.OrderBySearchRank, fileFilter);
UPDATE my _table SET update_version = update_version+1;
INSERT INTO my_table SELECT *, update_version = N FROM my_table;
对您的表格更具破坏性(现有数据范围变得越来越未排序),但更容易查询。 UPDATE
具有较小的破坏性(新数据附加到未排序的区域,现有数据不受影响)但如果您只需要查找当前值,则查询起来会更加困难。
如果您想使用INSERT
策略,但是您关心历史记录,那么您应该考虑在执行更新之前将当前行值写入的UPDATE
表