Допустим, я хочу смоделировать создание некоторых виджетов в RethinkDB. Запускается процесс построения, получает уникальный идентификатор, некоторое время работает, а затем, когда он завершен, записывает данные в базу данных под присвоенным ему идентификатором. Существует много типов виджетов, и идентификатор должен быть уникальным для всех них.
Если бы я делал это в Postgres, у меня, вероятно, была бы одна основная таблица widget
с одной таблицей для каждого типа виджета (widget_x
, widget_y
и т. д.), наследуемой от этой основной таблицы. ID будет иметь тип SERIAL в основной таблице widget
. Когда начнется процесс сборки, я вставлю некоторые данные, получу свой уникальный идентификатор, начну работать, а когда сборка будет завершена, обновлю таблицу. Я, вероятно, не стал бы использовать транзакции на протяжении всего процесса, потому что построение может занять много времени.
Как бы это сделать в RethinkDB? Мне действительно нужно, чтобы идентификатор был возрастающим целым числом, поэтому я не могу использовать ключи UUID по умолчанию. Я хочу, чтобы каждый тип виджета находился в своей таблице.
Если я сделаю этот запрос перед началом создания каждого виджета:
r.table("counters")
.get("some-uuid-key")
.update({ widget_counter: r.row("widget_counter").add(1) }, {return_vals: true})
будет ли это работать так, как я надеюсь, предоставляя мне уникальный идентификатор всей базы данных без какой-либо возможности конфликта идентификаторов?
Спасибо...