Я разработал систему транзакций для использования с SimpleDB. Я не уверен, что ваша схема выше будет работать из-за возможной последовательности. Хотя можно использовать согласованное чтение, это повлияет на вашу производительность и сведет на нет преимущества масштабируемости при использовании SimpleDB (возможно, вместо этого лучше использовать кластер серверов RDBMS).
Мой механизм не использует согласованные операции чтения и использует функцию многозначных элементов в SimpleDB для хранения истории транзакций, пар значений. Идентификаторы транзакций и статус хранятся в домене транзакций, который также записывает, какой домен / столбцы влияют на транзакцию.
После прочтения можно определить непротиворечивое значение col, создав дерево, в котором узлами являются значения (текущие и исторические), а соединения - это зависимости версия-> предыдущая_версия, и топологически отсортировав его. Если имеется один хвост (уникальный последний элемент в топологической сортировке), то это непротиворечивое значение для столбца. Значения, принадлежащие незафиксированным значениям, игнорируются в этом процессе.
Если нет уникального хвоста, это означает конфликт. Конфликты невозможно избежать в распределенной системе - из-за физики - просто невозможно иметь центральные часы, против которых можно ставить метки времени (или числа версий). Это потребовало бы соединения с задержкой 0 мс между всеми серверами, которые составляют систему (что невозможно - спросите Эйнштейна). При обнаружении конфликтов мы передаем их приложению для разрешения (поскольку это иногда не имеет большого значения и часто может быть разрешено с помощью дополнительной информации из моделей).
Мы также отмечаем время начала транзакции, и любая транзакция в таблице, не помеченная как зафиксированная или прерванная, считается прерванной, если истекло время ожидания.
Транзакции и исторические значения могут быть удалены из строк в любой точке, в которой они были уникальным узлом во всех топологических порядках.
Надеюсь, это даст вам (или кому-то) некоторые идеи, если вы решите пойти в этом направлении.