Die kurze Antwort auf die Frage gestellt Sie „Ja, die schnellste Methode wäre, Raw SQL zu verwenden, "oder eine Variante, die dynamisch neue Modelle erstellt und Makemigrationen ausführt.
Das heißt, in Ermangelung weiterer Informationen über Ihr Problem oder Ihre Aufgabe, muss ich sofort fragen, warum Sie Tabellen dynamisch erstellen möchten. Für den Anfang, das wird Sie die schönen Django-bereitgestellten ORM-Verbindungen zum Schema ohne mehr Trickserei verlieren (automatisch generierte Modelle, tägliche Makemigrationen, möglicherweise falsch platzierte Daten während Migration, spezialisierten Code Ihrerseits, etc.). Einige Gedanken:
- Für fast jedes Web-basierte Projekt mit sogar minimale Kapazität, 2000 Zeilen ist fast nichts. Sogar pro Tag. Nach einem ganzen Jahr sind das nur 730.000 Zeilen. Wenn Sie für Ihr Zugriffsmuster geeignete Schemaindizes und normalization annehmen, wird dies für ein RDBMS immer noch als vernachlässigbar angesehen.
- Wenn Sie wirklich für sharding planen müssen, betrachten Sie vielleicht tun es auf der jährlichen oder dekadischen Ebene. 730K * 10 Jahre ist nur 7.3M Zeilen, die in der Regel immer noch betrachtet im Bereich der vernachlässigbar (richtige Normalisierung und Indizes gegeben).
Wenn der vorgängigen auf diese Frage ist, dass Sie Geschwindigkeitsprobleme stoßen, dann empfehle ich Ihnen schwer, über Ihr Datenmodell des normalization, und darüber nachdenken, wo Sie hinzufügen müssen Indizes denken müssen. Wenn Ihr Standarddatenmodell beispielsweise nicht die richtigen Indizes bietet, verwenden Sie @ lodb's (schnelle Finger!) Vorschlag und manuell Django ORM, um Indizes zu erstellen:
class Meta:
indexes = [
models.Index(fields=['day',]),
]
Vielen Dank für diese Erklärung. Obwohl die täglichen Datensätze manchmal größer waren als ursprünglich angenommen, habe ich jetzt ungefähr 13 Millionen Datensätze in einer Tabelle, aber das ist in Ordnung. Die Tabelle wird nur 1-2 Mal am Tag abgefragt, um eine Berechnung durchzuführen und eine Grafik zu erstellen. Es erfordert auch nur einen kleinen Teil der Datensätze. Die Geschwindigkeit ist nicht so wichtig, in diesem Fall ist es die beste Lösung. – MK87