我可以为db映射对象使用变量表名吗?例如,有n个具有相同结构的对象,我想将它存储在不同的表中,以提高某些操作的性能。
假设我将课程定义为:
class Measurement(models.Model):
slave_id = models.IntegerField()
tag = models.CharField(max_length=40)
value = models.CharField(max_length=16)
timestamp = models.DateTimeField()
class Meta:
db_table = 'measurements'
现在所有对象都存储在表'测量'中。我想使表名依赖于'slave_id'值。例如,要处理表'measurements_00001','measurements_00002'等数据......
是否可以使用Django ORM模型实现这一点,或者唯一的解决方案是降低到SQL级别?
答案 0 :(得分:2)
在浩大的大多数情况下,这不应该为您带来任何性能优势。值得拥有的任何RDBMS都应该毫不费力地处理巨大的表格。
如果需要,可能会有一些表的分片。再次,由DB服务器管理;在SQL级别(和ORM),它应该被视为一个表。理想情况下,歧视应自动处理;如果没有,大多数RDBMS允许你在表定义时指定它(或者有时用ALTER TABLE调整)
如果您选择定义分片方法,则每个RDBMS都有自己的非标准方法。最好不要将Python代码绑定到那个;而是在数据库服务器上进行一次调整。