Kenneth Falck's Blog

Django is falling behind

Posted on 2012-11-28 by Kenneth Falck

I've used Django since 0.x. Now I'm getting very worried seeing that 1.5 beta has no mention of MongoDB or any other NoSQL support. MongoDB users are essentially still working with the django-nonrel fork, which is based on the rapidly aging Django 1.3.

There is MongoEngine, of course, but it's not very relevant. You don't get the major benefits of Django, which are the admin UI and a set of third party infrastructure modules like automatic user registration and Facebook integration.

Compare this to Ruby on Rails, which has Mongoid. You can autogenerate Rails applications that are fully MongoDB compatible. Critical infrastructure modules like Devise and OmniAuth work with Mongoid.

I see three options for the future:

1. The Django project integrates MongoDB support to the core, so that the admin UI and all third party modules just work automatically. Django has always claimed to be SQL-agnostic with its built-in ORM. Now it needs to deliver on this promise and actually make it work with Non-SQL databases. Third party apps and core modules may need to support two modes of operation - relational and non-relational - but that would be acceptable.

2. 10gen and rozza proactively add MongoEngine support to the Django admin UI and a couple of third party Django apps. MongoEngine can become the Mongoid of the Django world. This would happen by picking a set of critical infrastructure modules that are needed for building modern websites and making them MongoEngine compatible.

3. Django just gives up and remains an SQL-only platform. MongoDB is only used as an auxiliary database to store some extra stuff, and the core infrastructure always requires MySQL/Postgres. This implies all the usual RDBMS drawbacks, like frustrating schema migrations, complicated replication and sharding setups, extra caching layers and so on. Basically it means that Rails will win.