我有多个字段的django模型,它被映射到MySQL数据库,现在模型中有一个日期时间字段,我想在其中设置partitioning。
该模型如下所示:
class Packet(models.Model):
device = models.ForeignKey(Device)
packet_time = models.DateTimeField(default=timezone.now())
# Location Details
signal = models.CharField(max_length=2, default='A')
lat = models.FloatField(default=None, null=True)
lat_indicator = models.CharField(max_length=1, default='')
lng = models.FloatField(default=None, null=True)
lng_indicator = models.CharField(max_length=1, default='')
address = models.CharField(max_length=64, default='NA')
speed = models.FloatField(default=None, null=True)
orientation = models.FloatField(default=None, null=True)
#House Keeping Items
dor = models.DateTimeField(default=timezone.now()) # <= Want to partition this for weekly basis.
dirty = models.BooleanField(default=False)
请告诉我如何实现这一目标。
答案 0 :(得分:5)
正如Max的评论所述,django-db-parti
已被弃用,而不是architech。 Github链接可用here,并在readthedocs
原始答案:
django-db-parti包存在,似乎符合您的条件。 Github链接here。
该文件的MySQL部分说明:
MySQL在Django DB Parti中的分区实现是在一个 混合方式,一半在python级别,一半在数据库级别。 不幸的是MySQL并不支持触发器中的动态sql 在触发器中调用的函数,因此是创建的唯一方法 分区自动是在python上计算一切 level,然后根据计算和创建所需的sql语句 将该语句发布到数据库中。
并具有以下限制
- 并非所有分区类型都受支持。将在Django DB Parti的下一版本中添加新类型。
- 分区不适用于批量插入(即Django&#39的bulk_create()方法),因为它没有调用模型的save()方法 这个后端依赖于哪个。目前还没有已知的方法 删除此限制。
- 只能从低到高创建新分区,你可以用MySQL的特殊命令REORGANIZE PARTITION来克服这个问题。 你必须从数据库控制台发出。你可以阅读更多相关信息 它在MySQL的文档中。我们计划删除此限制 Django DB Parti的未来版本之一。
您的分区的configuration出现在您的模型的Meta类中。