Блокировка с S3

22
задан James Cooper 7 August 2010 в 17:44
поделиться

2 ответа

Хорошо, я провел некоторое время этим утром, играя с boto, и я думаю, что у меня есть решение, которое работает с использованием SimpleDB. Вам нужна последняя версия boto, чтобы поддерживались условные puts и последовательные reads.

Пример кода здесь: http://pastebin.com/3XzhPqfY

Пожалуйста, оставляйте комментарии/предложения. Я считаю, что этот код должен быть достаточно безопасным - мой тест в main() пробует его с 10 потоками.

Одна вещь, которую я не рассмотрел, это то, что чтение S3 не является последовательным (верно?), так что теоретически поток может работать со старой копией значения S3. Похоже, что для этого есть обходной путь, описанный здесь:

http://www.shlomoswidler.com/2009/12/read-after-write-consistency-in-amazon.html

10
ответ дан 29 November 2019 в 05:54
поделиться

Я не думаю, что вы можете сделать это, используя только S3, используя улучшения согласованности simpleDB, как сказал Джеймс. Это хороший способ, который работает

, вы можете посмотреть здесь несколько примеров: Улучшения согласованности Amazon SimpleDB

другой подход, который может подойти, заключается в использовании функции управления версиями из S3
, поэтому в основном сохраняйте пара «идентификатор объекта / идентификатор версии» в simpleDB в качестве наиболее «действительной» версии
и убедитесь, что все запросы GET будут извлекать эту версию
после успешного PUT измененного объекта, обновите идентификатор версии в БД

таким образом вы также можете использовать возможность извлечения предыдущих версий объекта для восстановления при необходимости.

2
ответ дан Adam 29 November 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: