⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

多数据库分片读写分离与动态路由

根据模型类型或用户ID实现水平分片,并动态切换数据库连接。 · 难度:入门 · +10XP

动态数据库分片路由器

本教程超越简单的master/slave读写分离,实现基于哈希的分片策略。例如:将User模型的数据分散到3个数据库实例,根据user_id % 3决定存储位置。同时,针对日志模型使用单独的数据库。你将编写自定义的DatabaseRouter类,实现db_for_read、db_for_write、allow_relation等方法,并利用中间件在请求中注入分片键。

class ShardRouter:
    def db_for_read(self, model, **hints):
        if model._meta.app_label == 'users':
            user_id = hints.get('instance').id
            return f'shard_{user_id % 3}'
        elif model._meta.app_label == 'logs':
            return 'logs_db'
        return 'default'
    
    def db_for_write(self, model, **hints):
        if model._meta.app_label == 'users':
            user_id = hints.get('instance').id
            return f'shard_{user_id % 3}'
        return 'default'
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 189 篇
0 完成
🔥 0