Hello, Pythonistas! Unfortunately, we have some news that will affect some of you - MongoDB is pausing our development of PyMODM. If you’re a user of PyMODM, you’ve probably noticed long before this point that our commit/improvements here have been sporadic at best.
We came to the decision to halt our development begrudgingly. The PyMODM project has relatively low usage, and there have been less than 1k users who visited the pymodm documentation year to date, but those who do use pyMODM have advocated for its improvement. Many of our top users for PyMODM are internal - that is, they are teams at MongoDB - so we are acutely aware that ceasing our development efforts here could be painful for our users.
The codebase will remain available to fork. If your team would like a replacement ODM, many Python users use mongoengine. One of our own developers, Ross Lawley, was previously heavily involved, and we know that this is an awesome open source project for the community.
As part of this announcement, we’d like to ask if there are any users who want to take over and maintain PyMODM, or if you just have questions, please reach out. Anything we can do to make this smoother for our users, we’re happy to do.
Thank you for using MongoDB, and for building great things with us.
I hope this is the right place to ask. I’ve tried switching to mongoengine in the past and, even though the API is almost the same, mongoengine was way slower than PyMODM. Does anyone have a similar experience? Anyone switching to mongoengine or others?
We found the same thing too. We ran some tests with a lot of referenced fields and checked the load/dump times. It was surprisingly slower, and this was like a year ago.
I hope this is the right place to ask. I’ve tried switching to mongoengine in the past and, even though the API is almost the same, mongoengine was way slower than PyMODM.
PyMODM has an optimization built in such that Model fields are lazily decoded when they’re first accessed. This optimization means applications with large or deeply nested Models do not pay the full cost of deserialization when accessing a few fields. I believe that mongoengine has worse performance in these cases because it fully decodes the entire Model, including all embedded Models within. It may be possible to get this lazy decoding feature implemented in mongoengine.
The decision to pause development on PyMODM was not COVID-related. The decision was driven mostly by lack of usage as @Rachelle pointed out in the original announcement. We are still looking for an interested member(s) of the community to take over ownership of the project and maintain PyMODM.