一个用于在您的项目中包含的数据分片应用程序,以便您能够以一致的方式分片您的数据。
项目描述
Django Sharding是一个库和部分框架,用于分片Django应用程序。
注意:由于发布中的错误,不支持Django 1.10.3。
它通过以一致的方式跨多个数据库分片您的数据来帮助您扩展应用程序。
什么是分片?
分片是通过在多个数据库中存储同一表的多个行的不同行来水平划分您的数据的方式。这有助于增加对给定资源的连接数,同时提高应用程序的读取性能。
阅读文档
有关如何在您的应用程序中设置分片的信息,请阅读文档。
开发者体验
我在为Wave工作并找不到适合我们需求的库后编写了这个库。我们所寻找的是强大、可扩展和可定制的库。这个库就是为了这个目的而创建的,并包含至少每个管道部分的实现,并留有空间替换任何单个组件。
影响
这个包受到了我在Wave的经历以及同事的帮助和代码的影响。
安装
有关基本包设置的详细信息,请参阅文档中的安装部分。
基本设置和使用
创建您的第一个分片模型
定义您的新模型,例如
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
运行迁移
正常运行它们,例如
./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>
访问分片数据
# TODO: Update this with methods.
shard = User.shard
Car.objects.using(shard).get(id=123)