【发布时间】:2011-10-13 13:38:51
【问题描述】:
我有一个“主模型”和很多“子模型”: 我知道会有很多数据(通过孩子),我想将该 MasterModel 的每个新实例动态存储在一个单独的数据库中(及其所有孩子)
class MasterModel(models.Model):
name = models.CharField()
#db_connexion_name='mastermodel_1_db'
class ChildModelA(models.Model):
mastermodel = models.ForeignKey(MasterModel)
class ChildModelB(models.Model):
mastermodel = models.ForeignKey(MasterModel)
child = models.ManyToManyField(ChildModelA)
child = models.ManyToManyField(ChildModelA)
class ChildModelC(models.Model):
...
有很多孩子和关系,但 MasterModel 对象之间从来没有
从现在开始,我想我必须这样做: 对于每个新的 MasterModel 实例(通过覆盖 save() 方法):
- 动态更新 settings.DATABASES 字典以添加新数据库:'mastermodel_1_db'、'mastermodel_2_db'
- syncdb(在该数据库上创建架构/表)
- 然后使用自定义 DatabaseRouter 管理数据库事务
像这样:
class MyDatabaseRouter(object):
def db_for_read() / db_for_write() / ... :
# for any model, return the database
# of the mastermodel related object
# like :
if hasattr(model,'mastermodel'):
return model.mastermodel.db_connexion_name
我走对了吗?
【问题讨论】:
-
当您说“大量数据”时,您指的是什么数量级? 1GB? 100GB? 10TB?感觉这可能是方式过早优化来解决可能永远不会实现的问题。
-
是的,这是一个bad、BAD、BAD的想法。如果负载是问题,那么有更好的方法来处理它。
-
大量数据意味着对于每个项目(MasterModel),将有大约 30 个模型,每个模型都有 [10.000 到 500.000] 条记录(MySQL)
标签: database django model instance