Frage

Hat jemand Tipps/Ratschläge zum Datenbankdesign für eine Webanwendung?Dinge, die mir in Zukunft viel Zeit und Mühe ersparen können, wenn die Anwendung, an der ich arbeite, startet und stark genutzt wird.

Genauer gesagt handelt es sich bei der Anwendung um ein Strategiespiel (browserbasiert, nur Text), bei dem Spieler hauptsächlich „Befehle“ erteilen, die in der Datenbank gespeichert und später verarbeitet werden, wobei auch die Ergebnisse dort gespeichert werden (der Verlauf). Anzahl der "Bestellungen" und die entsprechenden Ergebnisse werden wahrscheinlich ziemlich groß werden).

Bearbeitet, um weitere Details hinzuzufügen (wie gewünscht):

Plattform:Django

Datenbank-Engine:Ich habe darüber nachgedacht, MySQL zu verwenden (es sei denn, es bietet einen großen Vorteil, ein anderes zu verwenden).

das Schema:Alles, was ich jetzt habe, sind einige Django-Modelle, und das sind viel zu viele Details, um sie hier zu veröffentlichen.Und wenn ich anfange, Schemata zu veröffentlichen, wird das zu spezifisch und ich suchte nach allgemeinen Tipps.Stellen Sie sich zum Beispiel vor, dass ich „Aufträge“ erteile, die später verarbeitet werden, und ein Ergebnis zurücksende, das ich speichern muss, um eine Art „Verlauf“ anzuzeigen.Ist es in diesem Fall besser, eine separate Tabelle für den „Verlauf“ zu haben oder nur eine, die sowohl die „Bestellungen“ als auch das Ergebnis zusammenfasst?Ich schätze, ich könnte die Tabelle „history“ zwischenspeichern, aber das würde mehr Platz in der Datenbank und auch mehr Datenbankoperationen beanspruchen, weil ich ständig neue Zeilen erstellen müsste, anstatt sie nur in der Aggregattabelle zu ändern.

War es hilfreich?

Lösung

Sie haben wahrscheinlich ein viel größeres Thema des Designs für hohe Skalierbarkeit und Leistung im Allgemeinen angesprochen.

Im Wesentlichen würde ich für Ihr Datenbankdesign bewährte Praktiken befolgen, wie z. B. das Hinzufügen von Fremdschlüsseln und Indizes zu Daten, die Sie voraussichtlich häufig verwenden, die Normalisierung Ihrer Daten durch Aufteilen in kleinere Tabellen und die Festlegung, welche Daten häufig gelesen werden sollen und welche häufig geschrieben und optimiert.

Viel wichtiger als Ihr Datenbankdesign für leistungsstarke Webanwendungen ist die effektive Nutzung des Cachings sowohl auf Clientebene durch HTML-Seiten-Caching als auch auf Serverebene durch zwischengespeicherte Daten oder die Bereitstellung statischer Dateien anstelle dynamischer Dateien.

Das Tolle am Caching ist, dass es bei Bedarf hinzugefügt werden kann, sodass Sie sich entsprechend weiterentwickeln können, wenn Ihre Anwendung erfolgreich ist.

Was Ihre historischen Daten betrifft, ist das Zwischenspeichern eine tolle Sache, da Sie nicht damit rechnen, dass sie sich häufig ändern.Wenn Sie regelmäßig und ziemlich ausführliche Berichte aus Ihren Daten erstellen möchten, empfiehlt es sich, diese Daten in einer anderen Datenbank abzulegen, damit Ihre Webanwendung während der Ausführung nicht zum Stillstand kommt.

Natürlich ist diese Art der Optimierung wirklich nicht notwendig, es sei denn, Sie glauben, dass Ihre Anwendung dies rechtfertigt.

Andere Tipps

Datenbanknormalisierung, und sich gut über Indizes Gedanken zu machen, sind zwei Dinge, die Sie einfach nicht verpassen dürfen.Vor allem, wenn man ein Spiel betrachtet, bei dem SELECTs viel häufiger vorkommen als UPDATEs.

Auf lange Sicht sollten Sie auch einen Blick darauf werfen zwischengespeichert, da Datenbankabfragen zum Flaschenhals werden können, wenn Sie mehr als ein paar Benutzer haben.

Warum posten Sie nicht das Schema, das Sie jetzt haben?Es handelt sich um eine zu weit gefasste Frage, als dass sie sinnvoll beantwortet werden könnte, ohne dass detailliert beschrieben wird, welche Plattform und Datenbank Sie verwenden werden und welche Tabellenstruktur Sie vorschlagen ...

Du solltest denormalisieren Ihre Tabellen, wenn Sie feststellen, dass Sie mehr als 6 Tabellen in einer Abfrage verknüpfen, um Daten für eine Berichtstyp-Webseite abzurufen, die häufig aufgerufen wird.Wenn Sie ORM-Bibliotheken wie Hibernate oder ActiveRecord verwenden, achten Sie außerdem darauf, etwas Zeit mit den von ihnen generierten Standardzuordnungen und dem letztendlich generierten SQL zu verbringen.Sie sind in der Regel sehr gesprächig mit der Datenbank, wenn Sie mit einem Roundtrip zur Datenbank die gleichen Ergebnisse hätten erzielen können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top