В AWS DynamDB, почему мой ConsistentRead не дает мне самые последние данные? - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть типичный API REST-ful, выполняющий операции CRUD на DynamoDB, обслуживаемый веб-сервером Python, написанным на Fla sh и Boto3. Моя функция get_list выглядит так:

def list_items():
    table = dbh.Table(table_name)
    response = table.scan(ConsistentRead=True)
    return { "items": response["Items"] }

А также обновление, которое выглядит так:

def update_item (item_id):
    table = dbh.Table(table_name)
    input_json = request.get_json()
    table.put_item(Item = {
        "uuid": str(item_id),
        "data":input_json
        })
    return {}

Мое веб-приложение вызывает конечную точку API для update_item, ожидая завершения и затем немедленно вызывает конечную точку API для list_items, когда она получает возвращаемое значение от update_item. list_items использует ConsistentRead, что, как я ожидал, подождет до завершения предыдущих записей. Но в списке предметов постоянно отсутствуют новые обновления. Призыв к списку предметов через несколько секунд дает полное обновление. Как я могу гарантировать, что, если я вызову эти конечные точки API, я получу самые свежие результаты? Или, если я не могу, как мне структурировать свое веб-приложение так, чтобы при редактировании элемента я мог видеть обновления, не спя произвольное количество времени после обновления?

1 Ответ

0 голосов
/ 16 апреля 2020

В соответствии с документами

Если ConsistentRead имеет значение true, тогда все операции записи, завершенные до начала сканирования, гарантированно будут содержаться в ответе на сканирование.

Я не знаком с Boto / Python, но выполняется ли Put в асинхронном режиме c?

Если он не завершен в начале сканирования, вы увидите поведение, которое вы описываете.

...