Структура дерева Django MPTTModel повреждается в кэше Redis при одновременных операциях создания и извлечения данных

Usecase:

У нас есть случай, когда одна из наших моделей Content представляет иерархические данные для нашей организации, и для поддержания этой иерархии мы использовали пакет django-mptt, который основан на алгоритме Modified Preorder Tree Transversal и для ускорения времени ответа для клиента, мы внедрили Redis Cache через пакет django-cacheops для наших моделей.

enter image description here

Img src = http://www.sitepoint.com/hierarchical-data-database-2/

Проблема:

Поскольку мы использовали MPTTModel для поддержания иерархической структуры наших данных в базе данных, когда последовательные запросы CREATE и READ выполняются клиентами, мы получаем поврежденные данные в нашем Redis Cache.

Причина:

Когда мы выполняем операцию create над деревом, пакет MPTTModel фактически создает экземпляр объекта внутри базы данных и строит/поддерживает дерево, и пока пакет MPTTModel является строит/поддерживает дерево, в то же время к этому экземпляру делается запрос read, что приводит к повреждению данных внутри Redis Cache

Примечание:- архитектура нашей системы основана на Microservice Architecture из-за чего у нас есть несколько запросов, выполняемых различными микросервисами.

Кто-нибудь уже сталкивался с подобной проблемой и какое решение мы можем использовать для ее решения?

Вернуться на верх