1

Я использую AWS Redshift для выполнения аналитических запросов. Запрос выполняет некоторые вычисления и обновляет значение для ключа. Этот результат экспортируется в систему очереди для использования асинхронными клиентами. Однако, поскольку система очередей не обеспечивает упорядочение, мне нужен механизм для определения порядка. Мне нужно что-то вроде столбца «update_version», который увеличивается в каждой операции обновления. Это что-то аналогичное optimistic locking.Как достичь версии на уровне строк в режиме красного смещения?

Как достичь этого в красном смещении?

Один из способов - использовать временную метку, но она не является надежной, поскольку временная метка извлекается из отдельных узлов в кластере и подвержена clock skew.

Мне не нужен глобальный заказ.

Примечание: Пожалуйста, не предлагайте использовать упорядоченную очередь, так как из сферы действия этого вопроса возникают различные задачи.

+0

Если два процесса одновременно обновляли значение ключа, почему было бы более правильным, чем другое? Другими словами, если ваш работник очереди выбросил все новые сообщения, более старые, чем последние обработанные, то какой differenct будет работать с перекосом часов? – systemjack

+1

Кроме того, несмотря на то, что значение для данной точки данных может быть распределено по нескольким узлам, подсчитывается только часы рабочего узла, выбранного для запуска запроса на обновление. Все значения временных меток в разных хранилищах узлов для данного обновления будут идентичными. – systemjack

ответ

1

Вы можете сделать одно из следующих действий:

  • Run UPDATE my _table SET update_version = update_version+1;
  • Run INSERT INTO my_table SELECT *, update_version = N FROM my_table;

UPDATE является более разрушительным для вашей таблицы (существующий диапазон данных становится все более несортированный), но проще запрос. INSERT менее разрушительный (новые данные добавляются в несортированную область, существующие данные не затрагиваются), но сложнее запросить, если вам нужно только найти текущее значение.

Если вы хотите использовать стратегию UPDATE, но вы заботитесь об истории вы должны рассмотреть my_table_history таблицы, в которой вы пишете текущие значения строки перед тем вы выполняете обновление.

 Смежные вопросы

  • Нет связанных вопросов^_^