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

时间:2014-03-08 13:07:22

标签: mysql django django-models

我有多个字段的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)

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

1 个答案:

答案 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类中。