Wie, um performance-test der Datenbank
Erstellte ich eine Datenbank, die folgende Tabelle für die Aktivitäten der Nutzer:
user_id | INTEGER | user being notified
actor_id | INTEGER | user performing the action
activity_type | STRING | classname/type of the object being notified
activity_id | INTEGER | id of the object being notified
context_type | STRING | classname/type of the object's parent
context_id | INTEGER | id of the object's parent
read/view_at | DATETIME | timestamp of when user saw it
Ich weiß nicht, ob das design gut ist in Bezug auf die Leistungen. So möchte ich, um es zu testen irgendwie.
Ich kann das Auffüllen der Datenbank mit einer Menge von Daten und öffnen Sie die Seite, wo ich brauche, um die Daten aus dieser Tabelle aber ich weiß nicht, ob das relevant ist, testen.
Ist es ein guter Weg, um zu sehen, wie dieses design durchführen wird, wenn es 10.000
- Benutzer und - 50.000.000
Datensätze in Futtermitteln Tabelle?
Ich weiß nicht, ob dies helfen kann, aber ich bin mit MS SQL Server
- Es bauen; Messen; dann einstellen.
- Das bedeutet, dass dieses design bis zur Produktion. Aber was, wenn ich die 50.000.000-Aktivitäten und ich finde heraus, dass Benutzer nicht öffnen können Seite aufgrund der langsamen Datenbank. Ich muss sicher sein, dass dieses design für Aktivitäten funktionieren wird.
- Was ist deine hardware? Bist du mit SSD ' s? Was sind Ihre Indizes? Haben/Können Sie das design-schema-gebunden Ansichten zu cache-Aggregate? Was sind deine FK ' s??? Ich habe erst angefangen zu Fragen, die entsprechenden Fragen zu beantworten Ihre Fragen. erstellen Sie eine 3NF-design und beheben Sie performance-Bedenken, wenn Sie tatsächlich ein problem haben.
- was @PieterGeerkens ist zu sagen, dass es leicht sein würde, zum erstellen von DB mit denen Anzahl und testen Sie es unter die QPS, die Sie benötigen. es hängt von Ihnen ab-Abfragen und mehr.
- Tun Sie wirklich erwarten, 50M trifft, wenn Sie beginnen, Ihre Anwendung? Etwas seltsam, der eine Schätzung zu mir.
- Dieser ist für start up. Ich verwende shared-hosting-also nichts besonderes über die hardware. Es gibt keine FK mit diesem design werden diese einsamen Tisch. Es gibt auch andere Tabellen, wie Kommentare,Beiträge,Gruppen etc. Ich erwarte nicht, dass schnelles Wachstum zu 50.000.000 🙂 aber ich brauche, um das design dieser Datenbank richtigen Weg. Und ich habe nie etwas bauen in der Nähe dieser (mini-social-network) und müssen sicher sein, dass dieses design gehen für eine lange Zeit.
- Bitte beachten Sie, dass die Verwendung Dinge wie
activity_type
zu "wählen", die Tabelle zu verweisen (anstatt richtigen Fremdschlüssel) ist als anti-pattern. Für die Gründe, warum möchten Sie vielleicht zu schauen: Sql - Indirekte Foreign Key. Für einige alternativen, können Sie sich möglicherweise hier.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser arbeitete für mich so weit:
Wie Sie sehen können, die Datenbank-design ist nicht nur über die Erfüllung der business-Anforderungen. In der Tat, Verständnis , wie die Kunden wollen Zugriff auf die Daten ist integraler Bestandteil des design-Prozesses.
In anderen Worten, was ist traditionell, obwohl der als "logischer Entwurf" ist nicht genug - es muss ein "zwei-Wege-Straße" zwischen logischen und physikalischen design.
Dieser Satz enthält nicht genügend Informationen zu beantworten.
Zuerst erzählen Sie verwenden, wie Sie wollen Zugriff auf die Daten, dann können wir vielleicht helfen Sie (re -) design der Datenbank zu unterstützen, die insbesondere den Zugang Muster effizient.
1 Zum Beispiel, wenn "laden einer Seite", ist entscheidend für die user experience (was normalerweise der Fall ist), machen Sie eine Liste von Abfragen, die normalerweise ausgeführt werden, während dieses Prozesses.
2, Das schließt "körperliche" Techniken wie Indexierung, clustering, partitioning etc., kann aber auch einige Aspekte, die traditionell zwar als "logische" design, wie die Gestaltung von Tasten und Beziehungen. Wenn Sie verstehen, die zugrunde liegenden Datenstrukturen, die zu den typischen DBMS verwendet, werden Sie in der Lage, vorherzusagen, die Konsequenzen der Leistung von den meisten Ihrer design-Entscheidungen. Verwenden Sie Den Index, Luke! ist eine ausgezeichnete Einführung in das Thema.
select top 10 * from activities where user_id = 123 order by read/view_at desc
. Ich dachte, als ich alle ID ' s hier auf der Basis des Typs Verwendung von Verknüpfungen zu anderen Tabellen, aber ich denke, das wird mich ein problem, so entschied ich mich zu halten, so viele Daten wie kann ich in dieser Tabelle. Ich weiß, das denormalize Datenbank aber nicht finden können eine bessere Möglichkeit, dies zu tun.In Bezug auf Leistung, keine Annahmen sind sicher. Sollten Sie befolgen Sie diese Schritte:
Definieren die Ziele, über-Last und Antwortzeit. Sie sollten identifizieren, die angenommen Antwortzeiten für bestimmte Daten laden.
Ressourcen definieren. Nicht jede Maschine die Konfiguration verhält sich der gleiche. Sollten Sie erstellen eine Virtuelle Maschine mit der Ziel-Konfiguration.
Ausführen load testing. Sie könnten es tun, indem Sie mit tools wie SQL Server load generator.
Hoffe, das hilft!
Wenn die Leistung entscheidend ist, ist es etwas, das Sie brauchen, um zu bauen in Ihre Entwicklungs-pipeline.
Was ich getan habe, auf die performance-kritischen Projekte: