我可以为数据库映射对象使用可变表名吗?例如,有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 级别?
最佳答案
在绝大多数 情况下,这不会给您带来任何性能优势。任何物有所值的 RDBMS 都应该毫不费力地处理巨大的表。
如果需要,可以对表进行一些分片。同样,由数据库服务器管理;在 SQL 级别(和 ORM),它应该被视为单个表。理想情况下,应该自动处理歧视;如果没有,大多数 RDBMS 允许您在表定义时指定它(或者有时使用 ALTER TABLE 进行调整)
如果您选择定义分片方法,则每个 RDBMS 都有自己的非标准方法。最好不要将你的 Python 代码与它联系起来;改为在数据库服务器上进行一次调整。
关于database - Django 中的变量表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4727457/