2 Stimmen

Was muss ich über Datenbanken wissen, um eine hochwertige Django-Anwendung zu erstellen?

Ich versuche gerade, meine Website zu optimieren und habe dieses nette kleine Django-Dokument gefunden: Optimierung des Datenbankzugriffs in dem die Profilerstellung, gefolgt von der Indizierung und der Auswahl geeigneter Felder als Ausgangspunkt für die Datenbankoptimierung vorgeschlagen wird.

Normalerweise erklären die django-Dokumente die Dinge ziemlich gut, sogar Dinge, die erfahrene Programmierer als "offensichtlich" ansehen würden. Nicht so in diesem Fall. Nachdem die Indizierung nicht erklärt wurde, heißt es in der Dokumentation weiter:

Wir gehen davon aus, dass Sie die oben genannten offensichtlichen Dinge getan haben.

Uhhh. Moment! Was zum Teufel ist Indexierung?

Offensichtlich kann ich herausfinden, was Indizierung ist über Google, meine Frage ist: Was ist es, dass ich wissen muss, soweit die Datenbank Zeug geht, um eine skalierbare Website zu erstellen? Was sollte ich speziell über das Django-Framework wissen? Welche anderen "offensichtlichen" Dinge sollte ich wissen? Wo kann ich sie lernen?

Ich möchte hier eine Richtung vorgeben. Ich muss nicht alles über SQL lernen, ich möchte nur gut genug informiert sein, um meine App auf die richtige Weise zu erstellen.

Vielen Dank im Voraus!

3voto

Chris Pratt Punkte 219403

Ich ermutige Sie, alles zu lesen, was die anderen Antworten vorschlagen, und alles, was Sie sonst noch zu diesem Thema finden können, denn das sind alles gute Informationen, die Sie zu einem besseren Programmierer machen werden.

Einer der Vorteile von Django und anderen ähnlichen Frameworks besteht darin, dass man größtenteils nicht wissen muss, was hinter den Kulissen der DB vor sich geht. Django fügt automatisch Indizes für Felder hinzu, die sie benötigen. Der Anreiz, mehr hinzuzufügen, basiert auf den Anwendungsfällen Ihrer Anwendung. Wenn Sie ständig Abfragen basierend auf einem bestimmten Feld durchführen, sollten Sie sicherstellen, dass dieses Feld indiziert ist. Möglicherweise ist es das bereits (wenn es ein Fremdschlüssel, Primärschlüssel usw. ist), aber andere zufällige Felder sind es normalerweise nicht.

Außerdem gibt es verschiedene Optimierungen, die datenbankclientspezifisch sind. Django kann hier nicht viel tun, da es das Ziel ist, datenbankunabhängig zu bleiben. Wenn Sie also PostgreSQL, MySQL oder was auch immer verwenden, lesen Sie über Optimierungen und Best Practices für diese speziellen Clients.

1voto

dm03514 Punkte 52971

Wikipedia Datenbankdesign und Datenbanknormalisierung http://en.wikipedia.org/wiki/Database_design y http://en.wikipedia.org/wiki/Database_normalization sind neben der Indizierung zwei sehr wichtige Konzepte.

Darüber hinaus ist ein grundlegendes Verständnis der von Ihnen gewählten Datenbank erforderlich. Das Hinzufügen von Benutzern, das Festlegen von Berechtigungen und das Erstellen einer Datenbank sind wichtige Dinge, die Sie wissen sollten.

Es ist auch wichtig zu lernen, wie Sie Ihre Daten sichern können.

Die Liste wird immer länger, man sollte sich auch der db-Beziehungen bewusst sein, die django für Sie handhabt, OneToOne, ManyToMany, ManyToOne. https://docs.djangoproject.com/en/dev/topics/db/models/

Die Auswirkungen von JOINs auf die Leistung sollten nicht außer Acht gelassen werden. Der Zugriff auf Modelleigenschaften in Django ist so einfach, aber man sollte sich darüber im Klaren sein, dass einige der Fremdschlüsselbeziehungen enorme Auswirkungen auf die Leistung haben können.

Sobald Sie ein grundlegendes Verständnis dieser Dinge haben, sollten Sie einen ziemlich guten Ausgangspunkt für die Erstellung einer nicht-trivialen Django-Anwendung haben!

1voto

T I Punkte 9637

Wikipedia hat einen netten Artikel über Datenbank-Indizes, sie sind ähnlich wie ein Index in einem Buch, d.h. sie ermöglichen es Ihnen (dem Computer), Dinge schneller zu finden, weil Sie einfach in den Index schauen (wahrscheinlich ein sehr schlechtes Beispiel :-)

Was die Leistung betrifft, gibt es viele Dinge, die Sie tun können, und vermutlich, wie es ist ein sehr detailliertes Thema in sich selbst, und ist etwas, das speziell für jede RDBMS dann wäre es ablenkend / irrelevant für sie (django) zu gehen in große Details. Am besten ist es wirklich, nach Performance-Tipps für Ihr spezielles RDBMS zu googeln. Es gibt einige allgemeine Tipps wie Indizierung, Einschränkung von Abfragen, um nur die benötigten Daten zurückzugeben usw.

Ich denke, eines der wichtigsten Dinge ist ein gutes Design, das sich so weit wie möglich an Normalform und im Allgemeinen die Datenbank zu berücksichtigen, bevor Sie Ihre Modelle usw. programmieren (was Sie offensichtlich zu tun scheinen). Namenskonventionen sind ebenfalls ein großes Plus, denn explizit ist besser als implizit :-)

Zusammengefasst:

  • Erlernen/Verstehen der Grundlagen wie z. B. der Relationenmodell
  • Entscheiden Sie sich für eine Benennungskonvention
  • Entwerfen Sie Ihre Datenbank vielleicht mit einem ERM-Tool
  • Ersatz-IDs bevorzugen
  • Verwenden Sie den richtigen Datentyp mit der kleinstmöglichen Größe
  • Indizes angemessen verwenden und nicht überindizieren
  • Unnötige/übermäßige Abfragen vermeiden
  • Vorrang von Sicherheit und Stabilität vor der reinen Leistung
  • Sobald Sie eine funktionierende Datenbank haben, können Sie die Einstellungen für die Analyse/Profilierung der Datenbank, die Abfragen, das Design usw. "tunen".
  • Regelmäßige Sicherung und Archivierung - cron
  • Abhängen ici :-)
  • Bei Bedarf in die Replikation einsteigen (Master/Slave - django unterstützt dies ebenfalls sehr gut)
  • Erwägen Sie eine Aufrüstung Ihrer Hardware
  • Machen Sie sich nicht zu viele Gedanken darüber

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X