2016-10-11 40 views
1

データ量が非常に多いため、5日間以上のデータをすべて削除する必要があるため、Djangoモデルには5日間分のデータが保存されます。モデルには現在、Djangoが自動的に作成する自動増分idフィールドがあります。ここで問題となるのは、かなり早く、大きなプライマリキーを生成できないことです。Djangoモデルがunique_togetherで、自動インクリメントIDなしのプライマリキー

理想的には、複合主キーがありますが、Djangoはこれをまだサポートしていません。だから、私はunique_togetherを見ていて、それをpesudo pkとして使用して、アプリケーション内の何にも使われていないため、自動インクリメントIDを削除することが可能かどうか疑問に思っていました。

もう1つのオプションはこのモジュールです:django-compositekeyしかし、私はそれがどれくらいうまくサポートされているのかよく分かりません。いずれの場合も

私は一意のレコードを作るために4列を結合する必要があります:

class MassObservations(models.Model): 
    time = models.DateTimeField() 
    star = models.ForeignKey('Stars') 
    property = models.ForeignKey('Properties') 

    observatories = (('1', 'London'), 
        ('2', 'China'), 
        ('3', 'United States')) 

    station = models.CharField(max_length=2, choices=observatories) 
    mass = models.FloatField() 

    class Meta: 
     unique_together = ('time', 'star', 'property', 'station') 

このように、データ/ Djangoのテーブルを治療する方法上の任意の他のアイデア?

答えて

1

代わりに主キーとして整数を使用して、あなたはこのようにUUIDを使用することができます。

import uuid 
from django.db import models 

class MassObservations(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
    ... rest of your fields ... 

競合が「unlikly」でも、レコードのあなたの番号です。

一般的な主キーは「不良」ではありません。どうして? 1つのレコードを削除する方法について考えてみてください。ここで説明するように

Alternativlyが、あなたは、カスタムの "BIGINT" プライマリキーを作成することができます。

Django BigInteger auto-increment field as primary key?

(あなたがすぐに数字を使い果たすことは非常にunlikly:D)

+0

をOKああ、それはありますかなり良い解決策です。より多くのストレージコスト? – moku

+0

32ビット(4バイト整数)と128ビット(uuid)ですので、記憶容量は高くなります。 – chickahoona

関連する問題