Любые клиентские библиотеки, которые реализуют MVCC через Amazon SimpleDB?
Теперь, когда Amazon SimpleDB реализует согласованные операции чтения и условного обновления / удаления, можно реализовывать междоменные транзакции с использованием MVCC.
Есть ли клиентские библиотеки, которые предоставляют это?
2 ответа
В настоящее время их нет, и есть вероятность, что это может оказаться невозможным.
Условные обновления и удаления позволяют устанавливать только условие для обновляемого элемента. В дополнение к этому, нет встроенного механизма для хранения нескольких версий одних и тех же данных или хранения информации о последовательности для многозначных атрибутов. Могут использоваться разные имена атрибутов, но это нарушает запросы.
Недавние обновления согласованности позволяют легко осуществлять транзакции на уровне элемента. Однако для нескольких элементов в одном (или другом) домене нет прямой реализации. Также нет вариантов уровня изоляции.
Это может быть возможно, но я боюсь, что в итоге вы убьете все возможности запросов. Либо через несовместимые имена атрибутов, либо требуя больше условий SELECT, чем позволяет хорошая производительность.
Кроме того, кажется, что для ВСЕГО доступа к данным потребуются согласованные операции чтения. Это, вероятно, сведет на нет все преимущества доступности при использовании в конечном итоге непротиворечивой системы, поскольку непротиворечивые операции чтения завершаются неудачно, когда даже один узел реплики не может быть достигнут.
Я не пытаюсь быть скептиком, мне просто интересно, насколько это практично. Вам уже нужно отказаться от множества функций, чтобы получить высокую доступность SimpleDB, что хорошо, если вам не нужны эти функции, но если вы затем отказываетесь и от высокой доступности, я думаю, что гораздо меньше случаев, когда было бы хорошим компромиссом.
Я много думал об этом, работая над своей библиотекой Simple Savant C# для SimpleDB, и пришел к выводу, что попытка наслоить истинную транзакционность в распределенной системе, такой как SimpleDB, является плохой идеей по целому ряду причин.
Лучшая вещь, которую я придумал (которая обеспечивает ценность без чрезмерного обещания и чрезмерного усложнения системы) - это то, что я называю "надежные записи". Это гарантировало бы, что все операции (помещает и удаляет) в междоменном обновлении завершатся в конечном счете. Единственный способ постоянного сбоя части записи - это если одно из ваших обновлений нарушит ограничения SimpleDB.
Эта функция еще не реализована, но вы можете прочитать более подробную информацию и прокомментировать эту функцию здесь. Мне было бы интересно услышать ваши мысли и узнать, как это отвечает вашим потребностям как разработчика приложений.