2017-10-30 15 views
2

私はDjangoやデータベースで自分のデータをどのように管理すべきか考えているので、分かりやすい質問があります。Djangoで毎日データベースに新しいテーブルを作成する方法

1日あたり約2,000行、8列のテーブルです。私は過去10年間のすべての日々のデータをデータベースに保存し、毎日新しいデータを追加したいと考えています。毎日データベーステーブルを作成することをお勧めします。 Djangoでは、モデルごとにテーブルが作成されますが、発明者がDjangoで5000個のモデルを作成することは意図されていません。

テーブルを作成するために生のSQLを使用する唯一の方法はありますか?あるいは、私がドキュメンテーションで発見したことのない方法はありますか?

答えて

5

短い答えは「はい、最速の方法であり、生のSQLを使用することになります」、または新しいモデルを動的に作成し、マイグジットを実行するバリアントです。

これは、問題やタスクの詳細がないため、なぜテーブルを動的に作成するのかという疑問がすぐにわかります。初心者にとっては、スキルへの素敵なDjango提供のORM接続を失うことになります(自動的に生成されるモデル、毎日の作成、潜在的な置き換えられたデータの移行中、あなたの専門コードなど)。いくつか考え:

  1. ほとんどすべてのWebベースのプロジェクトでも、最小限の容量でも2000行はほとんどありません。一日でも。年間を通して、それはわずか730k行です。スキーマインデックスが適切で、アクセスパターンがnormalizationであると仮定すると、それでもRDBMSでは無視できるとみなされます。
  2. シャーディングを本当に計画する必要がある場合は、としてください。おそらくを年間または10年単位で実行してください。 730K * 10年はの7.3Mの行であり、一般にまだであると考えられます(適切な正規化とインデックスが与えられていれば)。

この質問への先行あなたはスピードの問題に遭遇しているということであれば、私はあなたのデータモデルのnormalizationについてハード考えると、あなたは、インデックスを追加する必要がある場所を考える必要があります示唆しています。たとえば、デフォルトのデータモデルで適切なインデックスが得られない場合は、@ lodb(クイックフィンガー!)の提案をして手動でDjangoのORMにインデックスを作成するよう伝えてください:

class Meta: 
    indexes = [ 
     models.Index(fields=['day',]), 
    ] 
+0

ありがとうございます。毎日のデータセットは元々考えられていたよりも時々大きくなっていましたが、今では1つのテーブルに約1,300万レコードがありますが、それは問題ありません。テーブルは1日に1〜2回だけクエリされ、計算が行われ、グラフィックが作成されます。また、データセットのほんの一部だけを必要とします。速度はそれほど重要ではないので、この場合は最高の解決策です。 – MK87

4

は正直なところ、一日あたりのテーブルは、それが使用する全体のフレームワークは多くの困難になるだろうとジャンゴに行くための最善の方法ではありません。

  • あなたは毎日
  • 新しいモデルを作成する必要があります
  • あなたはスピードは、あなたが一日あたりのテーブルを続けるだろう理由である場合、私はちょうど1 TABLを使用することになり、完全に

makemigrationsに必要と毎日移行

  • か、ORMを使用してスキップしますでしょうe、day-fieldのデータベースインデックスを使用します。それは少し遅いかもしれませんが、それはあなたの人生をずっと簡単にします。

    あなたのモデル定義にこれを追加する必要があります。

    class Meta: 
        indexes = [ 
         models.Index(fields=['day',]), 
        ] 
    

    マニュアルは、より詳細にそれを説明する:あなたが尋ねた質問にhttps://docs.djangoproject.com/en/1.11/ref/models/indexes/

  • 関連する問題