跳转到主要内容

一个用于在您的项目中包含的数据分片应用程序,以便您能够以一致的方式分片您的数据。

项目描述

Django Sharding是一个库和部分框架,用于分片Django应用程序。

注意:由于发布中的错误,不支持Django 1.10.3。

它通过以一致的方式跨多个数据库分片您的数据来帮助您扩展应用程序。

Build Status PyPI version PyPi downloads Coverage Status

什么是分片?

分片是通过在多个数据库中存储同一表的多个行的不同行来水平划分您的数据的方式。这有助于增加对给定资源的连接数,同时提高应用程序的读取性能。

阅读文档

有关如何在您的应用程序中设置分片的信息,请阅读文档

开发者体验

我在为Wave工作并找不到适合我们需求的库后编写了这个库。我们所寻找的是强大、可扩展和可定制的库。这个库就是为了这个目的而创建的,并包含至少每个管道部分的实现,并留有空间替换任何单个组件。

影响

这个包受到了我在Wave的经历以及同事的帮助和代码的影响。

安装

有关基本包设置的详细信息,请参阅文档中的安装部分

基本设置和使用

按用户分片

选择一个要分片的模型并打开models.py文件。这里我们将使用用户模型

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

使用字符串类路径将自定义用户添加到您的设置文件中

AUTH_USER_MODEL = '<app_with_user_model>.User'

创建您的第一个分片模型

定义您的新模型,例如

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)

项目详情


下载文件

下载适用于您平台的自定义文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分布

django_sharding-5.2.0.tar.gz (20.9 kB 查看哈希值)

上传时间

由以下提供支持