Django应用程序的简单数据库分片(水平分区)库。
django-horizon的Python项目详细描述
Django地平线
目的
Django应用程序的简单数据库分片(水平分区)库。
- 自由软件:麻省理工学院许可证
- 文档:https://django-horizon.readthedocs.io。
- 灵感来自django-sharding。非常感谢您的酷解决方案:)
功能
- 通过一些ForeignKey字段(如用户帐户)进行切分(水平分区)。
安装
要安装django horizon,请在终端中运行此命令:
$ pip install django-horizon
这是安装django horizon的首选方法,因为它总是安装最新的稳定版本。
如果您没有安装pip,这个Python installation guide可以指导 你完成了整个过程。
使用量
设置
在settings.py:
中添加数据库路由器配置水平数据库组和元数据存储
HORIZONTAL_CONFIG={'GROUPS':{'group1':{# The name of database horizontal partitioning group'DATABASES':{1:{'write':'member1-primary','read':['member1-replica-1','member1-replica-2'],# Pick randomly by router},2:{'write':'member2-primary','read':['member2-replica'],},3:{'write':'a3',# Used by 'read' too},},'PICKABLES':[2,3],# Group member keys to pick new database},},'METADATA_MODEL':'app.HorizontalMetadata',# Metadata store for horizontal partition key and there database}
数据库路由器
DATABASE_ROUTERS=('horizon.routers.HorizontalRouter',...)
示例模型
按用户划分的水平分区
元数据存储
fromhorizon.modelsimportAbstractHorizontalMetadataclassHorizontalMetadata(AbstractHorizontalMetadata):pass
在本例中,元数据存储保存以下内容。
- group:水平分区的组名。
- key:确定表记录在水平分区组中的分布。
- index:在水平分区组中选择了数据库索引。
使用型号
fromdjango.contrib.authimportget_user_modeluser_model=get_user_model()user=user_model.objects.get(pk=1)# Get by foreign instanceSomeLargeModel.objects.filter(uses=user)# Get by foreign idSomeLargeModel.objects.filter(uses_id=user.id)
型号限制
django.db.utils.IntegrityError未指定要筛选的水平键字段时发生
SomeLargeModel.objects.all()
无法按外键字段查找,因为存在其他(如default)数据库
list(user.somelargemodel_set.all())
django.db.utils.IntegrityError未指定要筛选的水平键字段时发生
SomeLargeModel.objects.all()
无法按外键字段查找,因为存在其他(如default)数据库
list(user.somelargemodel_set.all())
历史记录
1.1.2(2018-11-15)
- 将_create_object_from_params更新为新接口
- 添加对django 2.1的支持
- 添加对Python3.7的支持
1.1.1(2018-08-03)
- 迁移到^ {TT10}$作为MIXIN
1.1.0(2018-03-30)
- 放弃对django 1.9、1.10的支持
1.0.0(2018-02-02)
- 添加对django 2.0的支持
- 放弃对django 1.8的支持
0.0.1(2017-05-22)
- pypi上的第一个版本。