Arhn - архитектура программирования

БД Google App Engine не выполняется до завершения перед возвратом

В настоящее время я работаю со встроенной базой данных Google App Engine. Кажется, что когда я запускаю put() для вставки кортежа в базу данных, функция возвращается, даже если кортеж еще не был полностью вставлен. Вот код:

new_user = Users(username=username_input, hashed_password=get_hashed_password(username_input, password))
new_user.put()

existing_user = None
while not existing_user:    
        print "existing_user still not in DB"

        #tries to get the user that was put into the DB
        existing_user = db.GqlQuery("SELECT * FROM Users WHERE username=:username_input", username_input=username_input).get()
print "existing_user in DB"

Когда я запускаю этот код, я получаю следующий вывод:

existing_user still not in DB
existing_user still not in DB
existing_user still not in DB
existing_user still not in DB
existing_user still not in DB
existing_user still not in DB
existing_user still not in DB
existing_user still not in DB
existing_user in DB

Почему это так? Разве put() не следует заканчивать размещение кортежа в БД перед возвратом?


Ответы:


1

Хранилище данных «в конечном счете непротиворечиво». Это означает, что после изменений (вставки/обновления/удаления) запросы могут (будут) на короткое время возвращать старое представление данных. С помощью SDK это моделируется задержкой в ​​1 секунду. В живой среде оно обычно меньше, но иногда и больше.

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

Вы можете прочитать больше здесь и здесь.

19.06.2016
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..