O mongoengine é muito lento em documentos grandes comparado ao uso nativo de pymongo
Eu tenho o seguinte modelo mongoengine:
class MyModel(Document):
date = DateTimeField(required = True)
data_dict_1 = DictField(required = False)
data_dict_2 = DictField(required = True)
Em alguns casos, o documento no banco de dados pode ser muito grande (em torno de 5 a 10 MB) e os campos data_dict contêm documentos aninhados complexos (ditado de listas de dictos, etc ...).
Encontrei dois problemas (possivelmente relacionados):
Quando executo a consulta nativa pymongo find_one (), ela retorna em um segundo. Quando executo MyModel.objects.first (), leva de 5 a 10 segundos.Quando consulta um único documento grande no banco de dados e, em seguida, acesso seu campo, leva de 10 a 20 segundos apenas para fazer o seguinte:
m = MyModel.objects.first()
val = m.data_dict_1.get(some_key)
Os dados no objeto não contêm nenhuma referência a nenhum outro objeto, portanto, não se trata de desreferenciamento de objetos.
Suspeito que esteja relacionado a alguma ineficiência da representação de dados internos do mongoengine, que afeta a construção do objeto de documento e o acesso aos campos. Existe algo que eu possa fazer para melhorar isso?