【问题标题】:How to do DB partitioning on a field in django?如何在 django 中的字段上进行数据库分区?
【发布时间】:2014-04-11 18:13:00
【问题描述】:

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

请告诉我如何实现这一点。

【问题讨论】:

标签: mysql django django-models


【解决方案1】:

正如 Max 在评论中提到的,django-db-parti 已被弃用,而支持architect。 Github 链接在here 上可用,在readthedocs 上提供更多文档


原答案:

django-db-parti 包存在,它似乎符合您的条件。 Github链接here.

文档的 MySQL 部分指出:

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

并且有以下限制

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

分区的configuration 出现在模型的 Meta 类中。

【讨论】:

猜你喜欢
  • 2019-11-26
  • 2011-06-21
  • 2011-07-08
  • 2020-12-29
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多