-
Notifications
You must be signed in to change notification settings - Fork 83
Project Ideas
: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!)
: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.
: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.
: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
: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.
: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.
: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.
: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.
: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.
: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.