Skip to content
aburgel edited this page Mar 17, 2013 · 1 revision

Project ideas

Documentation

:Difficulty: Easy

(Re-)Write the main docs (https://github.com/django-nonrel/docs). You don't need to be perfect/native English writer; we're happy to assist you turning your draft into well-written docs. (And docs shouldn't contain much prose anyway!)

Get nonrel changes into Django trunk

:Difficulty: Medium :Requirements: Knowledge of the Django ORM internals (or willing to dive in)

Most of the changes between Django-nonrel and Django trunk have been submitted as patches to the Django bug tracker. Based on the work already done in this field, extend their documentation (motivation of the changes etc) and get them into a shape that is accepted by the Django core team to ultimatively get the changes into Django trunk.

Refactor Django ORM abstractions

:Difficulty: Difficult :Requirements: Good knowledge of the Django ORM, strong refactoring skills, perseverance

Django's ORM's abstractions are pretty screwed up (in terms of database independence): Manager --> Query --> sql.Query --> SQLCompiler --> Backend.

It actually should read somewhat like Manager --> Query --> (Backend-agnostic optimizer -->) Backend where Backend is one of MySQL, PosgreSQL, SQLite, App Engine, MongoDB, Cassandra, ...

Fix this.

Sub-object queries

:Difficulty: medium :Requirements: strong refactoring skills

Make it possible to use the ORM for sub-object queries, i.e. queries that reach into nested data structures, with Django's underscore syntax -- i.e. .filter(foo__bar=...) should be translated into a JOIN if foo is a relational field and into a sub-object query if foo is a nested data structure field (ListField), so that it's possible to do this::

class Post(models.Model):
    comments = ListField(EmbeddedModelField('Comment'))

class Comment(models.Model):
    author = models.CharField()
    text = models.TextField()

Post.objects.filter(comments__author='John') # all posts that have a comment by John
Post.objects.filter(comments__text__icontains='shit') # all posts with profanity in comments

Cassandra backend

:Difficulty: Medium/difficult :Requirements: Basic knowledge of the Django ORM internals, Cassandra CQL

Two backends, Cassandra and Redis are much needed. Cassandra is becoming more popular and powerful these days.

Google App Engine NDB backend

:Difficulty: Medium :Requirements: Basic knowledge of the Django ORM internals, Google App Engine NDB

Google App Engine's datastore is currently accessed with the db python api. There in a current push to a new ndb python api. Two big features of ndb are automatic query caching, and automated batching to minimize round trips to the datastore. If it's of any additional interest, the ndb product is lead by Guido van Rossum.

Form support for nonrel specific fields

:Difficulty: Easy :Requirements: Knowledge of the Django Form Field internals (or willing to dive in)

Most general requirement. Form support for nonrel specific fields such as ListField, DictField, SetField, etc.

Extend Django to support Nonrel specific fields

:Difficulty: Difficult :Requirements: Knowledge of the Django ORM internals and SQL (or willing to dive in)

Extend Django to support nonrel specific field also. DictField, ListField, etc sort of things already implemented in relational DBs, port those techniques to Django ORM. This leads to more acceptability of Django-nonrel in the Django community. Probably needs some refactoring of the Django ORM, so this task is considered difficult.

Need more concrete example of SQL tables style used for DictField, ListField, etc.

ManyToManyField support

:Difficulty: Medium :Requirements: Knowledge of the Django ORM internals (or willing to dive in)

Allow classical many-to-many relations be used with NoSQL backends in a reasonably efficient manner. These relations are realized as additional tables used within JOINs on relational databases, but a different solution is needed for Nonrel. Supporting non-abstract base models is closely related.

Cascade deletes

:Difficulty: Medium :Requirements: Interest in performance of NoSQL databases

Nonrel currently disables cascade deletes, because they can result in large, inefficient batches of operations on some NoSQL databases. Design a platform independent framework that would guard against this inefficiency and allow to take advantage of backend specific solutions when its unavoidable (e.g. moving the operation to a background task). See also https://github.com/django-nonrel/django-nonrel/issues/1.