Mongoengine очень медленно работает с большими документами по сравнению с обычным использованием pymongo
У меня есть следующая модель mongoengine:
class MyModel(Document):
date = DateTimeField(required = True)
data_dict_1 = DictField(required = False)
data_dict_2 = DictField(required = True)
В некоторых случаях документ в БД может быть очень большим (около 5-10 МБ), а поля data_dict содержат сложные вложенные документы (dict списков dicts и т. Д.).
Я столкнулся с двумя (возможно, связанными) проблемами:
Когда я запускаю нативный запрос pymongo find_one (), он возвращается через секунду. Когда я запускаю MyModel.objects.first (), это занимает 5-10 секунд.Когда я запрашиваю один большой документ из БД и затем обращаюсь к его полю, требуется 10-20 секунд, чтобы выполнить следующее:
m = MyModel.objects.first()
val = m.data_dict_1.get(some_key)
Данные в объекте не содержат никаких ссылок на какие-либо другие объекты, поэтому это не проблема разыменования объектов.
Я подозреваю, что это связано с некоторой неэффективностью внутреннего представления данных mongoengine, которое влияет на конструкцию объекта документа, а также на доступ к полям. Что я могу сделать, чтобы улучшить это?