Фиксация/видимость GAE HR + метка времени

GAE HR — это еще один шаг к масштабируемости, разделяющей фиксацию и видимость, но еще один шаг назад к удобству использования. Это разделение создает проблему («конечную согласованность»?), которая убивает его использование в некоторых проектах приложений. Обычно я делаю коммит внутри http-запроса и перенаправляюсь на другую страницу, которая показывает результаты, но мне приходится делать небольшую задержку (много миллисекунд), чтобы попытаться получить изменения этого коммита. Это самый простой обходной путь, который я нашел для этого, а не исправление. К сожалению, у меня нет гарантии, что я получил изменения этого коммита. Я думаю, что из-за парадигмы синхронизма множественных вычислений невозможно узнать, сколько времени займет обновление изменений, что может занять миллисекунды, минуты или даже дни (в маловероятном случае).

Мне было интересно, я мог бы «исправить» это, используя временные метки, которые легко передать другому запросу в строке запроса или сохранить в переменной memcache сеанса. Если у меня есть метка времени моей последней фиксации, любой последующий запрос к базе данных может использовать эту метку времени, чтобы проверить, были ли извлеченные данные зафиксированы после этой метки времени, если нет, он повторяет запрос снова и снова. Таким образом, у меня есть гарантия правильной видимости («строгая согласованность»?), даже если это занимает много времени. В конечном итоге он может прочитать данные, переданные другим пользователем/процессом после этой временной метки, что я не считаю проблемой. Правилен ли этот подход?

Я могу реализовать это с полем временной метки в каждой таблице, но лучше использовать библиотеку (встроенные поля временной метки, автоматическая настройка времени опроса, временная метка сеанса внутреннего кэша последней фиксации и, возможно, некоторый низкоуровневый обратный вызов базы данных вместо опроса) . Есть ли такая сторонняя библиотека? Я знаю библиотеки ORM, которые используют API-интерфейсы базы данных низкого уровня GAE, но я понятия не имею, как начать что-то подобное.


person Julio Otuyama    schedule 12.01.2015    source источник


Ответы (1)


Для строгой согласованности в хранилище данных GAE используйте запросы предков.

https://cloud.google.com/appengine/docs/python/datastore/queries#Python_Ancestor_queries

person Jeff Deskins    schedule 12.01.2015
comment
Я просто хочу минимальное изменение в приложении для достижения правильной видимости, по крайней мере, в некоторых запросах. Если концепция верна, я бы реализовал такую ​​​​библиотеку. Легче использовать одну метку времени (в конечном итоге скрытую за библиотекой), чем переделывать базу данных. - person Julio Otuyama; 13.01.2015
comment
Случайно ли обходной путь для этого состоит в том, чтобы создать фиктивную таблицу и сделать ее родительской для моей таблицы? Гарантирует ли это какие-либо запросы в моей таблице? Даже после прошивок? Эту проблему довольно сложно обнаружить, поэтому любые советы приветствуются. - person Julio Otuyama; 15.01.2015