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