如何在django中的字段上进行数据库分区?

akm*_*akm 3 mysql django django-models

我有多个字段的django模型,它被映射到MySQL数据库,现在模型中有一个日期时间字段,我想在其中设置分区.

该模型如下所示:

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)
Run Code Online (Sandbox Code Playgroud)

请告诉我如何实现这一目标.

And*_*ndy 5

正如Max的评论中所提到的,django-db-parti不赞成使用architech.这里提供 Github链接,并提供了有关readthedocs的更多文档


原答案:

Django的DB-汉邦包存在,这似乎符合您的标准.Github链接在这里.

该文档的MySQL部分指出:

MySQL在Django DB Parti中的分区实现是以混合方式完成的,一半在python级别,一半在数据库级别.不幸的是MySQL不支持触发器中的动态sql或触发器中调用的函数,因此自动创建分区的唯一方法是在python级别计算所有内容,然后根据计算创建所需的sql语句并将该语句发布到数据库.

并具有以下限制

  • 并非所有分区类型都受支持.Django DB Parti的下一个版本中将添加新类型.
  • 分区不适用于批量插入(即Django的bulk_create()方法),因为它不会调用此后端依赖的模型的save()方法.目前没有已知的方法来消除此限制.
  • 新的分区只能从低到高创建,您可以使用MySQL的特殊命令REORGANIZE PARTITION来解决这个问题,您需要从数据库控制台发出它.您可以在MySQL的文档中阅读更多相关信息.我们计划在Django DB Parti的未来版本之一中删除此限制.

分区的配置发生在模型的Meta类中.