Git Product home page Git Product logo

django-sharding's Introduction

Django Sharding is a library and part-framework for sharding Django applications.

Note: Does not support Django 1.10.3 due to a bug in the release.

It helps you to scale your applications by sharding your data across multiple databases in a consistent way.

Build Status PyPI version PyPi downloads Coverage Status

What is Sharding?

Sharding is a way of horizontally partitioning your data by storing different rows of the same table in multiple tables across multiple databases. This helps to increase the number of connections to a given resource as well as improves read performance of your application.

Read The Documentation

For information about how to setup sharding in your application, read the documentation.

Developer Experience

I wrote this library after working on this problem for Wave and not being able to find a library that suited our needs. What we were looking for was something that was powerful, extensible and customizable. This library was created for just that purpose and includes at least one implementation of each part of the pipeline with room to replace any individual components.

Influences

The package was influenced by my experiences at Wave as well as the help and code of my co-workers.

Installation

Check out the installation section of the docs for basic package setup.

Basis Setup & Usage

Sharding by User

Select a model to shard by and open up the models.py file. Here we'll use the user model:

from django.contrib.auth.models import AbstractUser

from django_sharding_library.decorators import shard_storage_config
from django_sharding_library.models import ShardedByMixin


@shard_storage_config()
class User(AbstractUser, ShardedByMixin):
    pass

Add that custom User to your settings file using the string class path:

AUTH_USER_MODEL = '<app_with_user_model>.User'

Create Your First Sharded Model

Define your new model, eg:

from django.db import models

from django_sharding_library.decorators import model_config
from django_sharding_library.fields import TableShardedIDField
from django_sharding_library.models import TableStrategyModel


@model_config(database='default')
class ShardedCarIDs(TableStrategyModel):
    pass


@model_config(sharded=True)
class Car(models.Model):
    id = TableShardedIDField(primary_key=True, source_table_name='app.ShardedCarIDs')
    ignition_type = models.CharField(max_length=120)
    company = models.ForeignKey('companies.Company')

    def get_shard(self):
        return self.company.user.shard

Running migrations

Run them as normal, for example:

./manage.py makemigrations <app_name>

# To let django run the migrations in all the right places.
./manage.py migrate <app>

# To specify the database to run it on
./manage.py migrate <app> --database=<database_alias>

Acccessing sharded data

# TODO: Update this with methods.
shard = User.shard
Car.objects.using(shard).get(id=123)

django-sharding's People

Contributors

jbkahn avatar jimgraham avatar surgo avatar 4word avatar tommyzli avatar jwadden avatar ekohl avatar justinsacbibit avatar nduthoit avatar ryanwilsonperkin avatar binarysubstrate avatar

Stargazers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.