Кэш объектов DAX и кеш запросов не синхронизированы; нет способа указать кешу запросов удалить неверные данные?

Согласно документации DynamoDB DAX, DAX поддерживает два отдельных кеша: один для объектов и один для запросов. Что нормально, я думаю.

Проблема в том, что если вы изменили объект и измененное значение объекта должно повлиять на значение, хранящееся в кеше запросов, похоже, нет никакого способа сообщить об этом DAX, а это означает, что кеш запросов будет неправильным, пока его TTL не истечет.

Это довольно ограничивает, и, похоже, нет простого способа обойти это.

Кто-нибудь скажет мне, что я не знаю, о чем говорю, и есть способ посоветовать DAX удалить значения кэша запросов.


person Eli    schedule 15.02.2018    source источник
comment
именно поэтому я только что исследовал DAX ... производительность чтения ddb великолепна, но запрос/пейджинг не очень. фу. очень хотелось бы вернуться в прошлое и сказать прошлому, чтобы я втиснул свое приложение в RBDMS и положил на этом конец. ddb — отличный k/v, но, несмотря на соблазн большего — это все, что есть.   -  person Cory Mawhorter    schedule 28.03.2019


Ответы (2)


Я бы хотел, чтобы был лучший ответ, но, к сожалению, в настоящее время нет способа обновить значения кэша запросов, кроме истечения срока действия TTL. Значения кэша элементов немедленно обновляются любыми запросами на размещение или обновление, сделанными через DAX, но не при наличии каких-либо изменений, внесенных непосредственно в DynamoDB.

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

person Abdelrahman Elhaddad    schedule 15.02.2018
comment
Ой. Я боялся, что это будет ответ. Знаете ли вы: есть ли какое-либо движение в работе, чтобы улучшить это? - person Eli; 16.02.2018
comment
Это, конечно, то, что мы обсуждали, но мы не пришли к выводу о том, каким должно быть поведение. Мы открыты для предложений, хотя форумы AWS (forums.aws.amazon. com/forum.jspa?forumID=131), вероятно, лучшее место для обсуждения, чем здесь. - person Jeff Hardy; 20.02.2018
comment
Это действительно должно быть в верхней части документации DAX крупным шрифтом. - person Adrian Baker; 05.04.2018
comment
Есть ли поле, которое можно (ab) использовать, чтобы заставить его рассматриваться как новый запрос, при этом используя то же условие, проекцию и т. д.? Что-то вроде идентификатора сеанса, для которого вы могли бы рандомизировать новое значение, когда вы хотите начать заново для определенного набора запросов, например, для принудительного промаха кеша? - person JHH; 23.11.2018

Согласно документации Dynamo Db, вы должны передать запрос на обновление через DAX.

DAX поддерживает следующие операции записи: PutItem, UpdateItem, DeleteItem и BatchWriteItem. Когда вы отправляете один из этих запросов в DAX, он делает следующее:

DAX отправляет запрос в DynamoDB.

DynamoDB отвечает DAX, подтверждая, что запись прошла успешно.

DAX записывает элемент в свой кэш элементов.

DAX возвращает отправителю запроса сообщение об успешном завершении.

Если запись в DynamoDB завершается сбоем по какой-либо причине, включая регулирование, элемент не будет кэшироваться в DAX, и отправителю запроса будет возвращено исключение, связанное с ошибкой. Это гарантирует, что данные не будут записываться в кеш DAX, если только они не будут успешно записаны в DynamoDB.

Поэтому вместо использования метода update базы данных Dynamo используйте UpdateItem.

Чтобы узнать больше, перейдите по этой ссылке.

person Anurag pareek    schedule 01.10.2018
comment
Кажется, это вообще не относится к вопросу. - person JHH; 23.11.2018