Amazon SimpleDB — атомарность и очереди — сделать 2 размещения атомарным способом?

У нас есть несколько приложений для смартфонов, использующих Amazon SimpleDB и s3.

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

До сих пор все было хорошо и полностью удовлетворяло наши разумные потребности.

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

Проблема в том, что эти «2 размещения» должны выполняться атомарно, как блок «все или ничего». Между двумя установками база данных не имеет целостности, и никто не сможет прочитать ее в таком плохом состоянии.

Итак, то, что я ищу, — это самый простой способ добиться этого, я думаю, он будет включать в себя какие-то очереди, где операции обрабатываются одна за другой, включая только чтение.

Но, честно говоря, это не моя область, и я надеюсь, что это не связано с написанием какого-то очень сложного веб-приложения на выделенном сервере.

Любое обходное решение или указатели на знания, которых у меня, очевидно, еще нет, будут очень признательны.

Спасибо!


person MikaelW    schedule 07.02.2013    source источник
comment
Почему бы просто не установить специальный атрибут при первом размещении, и тогда вы сможете узнать, находится ли элемент в плохом состоянии?   -  person Willy    schedule 07.02.2013


Ответы (1)


Атомарность и транзакции — это некоторые из замечательных функций реляционных баз данных, от которых вы отказываетесь при использовании решения NoSQL, такого как SimpledDB. Возможно, вы захотите рассмотреть дешевую размещенную базу данных MySQL, например, предоставляемую Amazon RDS или одним из многих других поставщиков размещенных баз данных. Однако, если вы хотите продолжить работу с SimpleDB, вам не нужна очередь, но вы можете сворачивать свои собственные транзакции и делать так, как предложил Вилли:

  1. Добавьте к сохраненным элементам такой атрибут, как «завершено».
  2. Напишите инструмент (или найдите продукт), который может обновить все ваши ранее сохраненные элементы со значением commit=1.
  3. Обновите свой код, чтобы на первом этапе вашей двухэтапной операции элемент сохранялся с атрибутом commit=0, а на втором шаге элемент «фиксировался», устанавливая commit=1.
  4. Измените все свои запросы, чтобы они извлекали только зафиксированные элементы, что-то вроде этого «выберите * из вашего_домена, где {критерии1} и {критерии2} и {больше критериев} и зафиксировано = '1'».
person lreeder    schedule 05.05.2013