Ich bin dabei, etwas wirklich Großes auf den Weg zu bringen. Ich muss meinen Server und meine Datenbank vorbereiten.
Ich möchte jede Gruppe von 100.000 Benutzern in separaten Benutzertabellen gruppieren, kann jedoch keinen Benutzer zuordnen, der versucht, sich bei der entsprechenden Benutzertabelle anzumelden.
Woher weiß ich beispielsweise, dass der Benutzer [email protected]
mit der Benutzertabelle # 36 in Beziehung steht?
Wäre es dasselbe, 10 Millionen Benutzer in einer Benutzertabelle oder 100 von 100.000 zu haben?
Wie geht Facebook? Ich kann nicht glauben, dass sie eine globale Benutzertabelle mit 950 Millionen Einträgen haben würden.
I can't believe they would have one global user table with 950 million entries.
Ich kann, es ist nicht so groß. Ich habe mit größeren Tischen gearbeitet. Es ist ziemlich häufig. Die andere Option, die ich in Betracht ziehen würde, wenn Sie viele andere Daten haben, ist eine NoSQL- Datenbank.Antworten:
Sie werden morgen keine Milliarde Benutzer haben und MySQL kann problemlos mehrere Millionen Zeilen verarbeiten. Ich habe 5 Millionen Benutzer in meiner Benutzertabelle und vertraue mir, es ist nicht einmal mein Radar der Dinge, über die ich mir Sorgen machen muss.
Kümmere dich nicht um Sharding , bis Sie brauchen , es zu tun. Sie versuchen, vorzeitig eine Optimierung für ein Problem durchzuführen, das möglicherweise nicht vorhanden ist, und dabei wird die Innovationsrate erheblich beeinträchtigt. Seien Sie schnell zu starten und finden Sie die Probleme, wie sie kommen. Sie können Ihre Skalierungsherausforderungen nicht im Voraus vorhersagen.
Wann und wann immer Sie diese Größenordnung erreichen, haben Sie eine Menge Geld und Ressourcen, um diese Art von Problem zu lösen.
quelle
Be fast to launch and find the problems as they come
Dieser Teil ist ausgezeichnet. Das ist richtig. Wenn wir Probleme feststellen, wird es zu einem späteren Zeitpunkt keine ernsthaften Probleme geben. +1Ich bin mir nicht sicher, ob externe Berater die bessere Unterstützung für Ihr Unternehmen darstellen, wenn Sie mit sehr großen Datenmengen arbeiten und von Grund auf neu beginnen müssen. Verstehen Sie mich bitte nicht falsch, aber wenn jemand ein Projekt mit so vielen Kunden vermasselt, hat dies PR-Auswirkungen auf Ihr Unternehmen.
In Bezug auf 10 Millionen Tupel in einer Tabelle ist es in Ordnung, wenn Sie eine gute Indizierung haben. Wir müssen hier mehrere 100 Millionen Tupel in einer Tabelle aufbewahren (verkaufte Artikel), was auf einem großen Orakel 11 g gut funktioniert
Hier ist ein Beitrag aus dem Jahr 2010 mit einer Karte von Facebooks DB Design: Facebook-Datenbank-Design
Vielleicht möchten Sie die MySQL-Dokumentation zu Partitionstypen wie folgt lesen: MySQL-Dokumentation: Partitionierung
MySQL unterstützt folgende Typen:
quelle
Teilen Sie Benutzer zunächst nicht in separate Tabellen auf. Es wird die Dinge komplex und sinnlos machen. Datenbanken wie MySQL und andere können problemlos mit den Datenbanken von Millionen von Datensätzen in derselben Tabelle arbeiten (mit den richtigen PRIMARY KEYS). Verwenden Sie das eindeutige Datenbank-Schlüsselfeld AUTO_INCREMENT AND PRIMARY für jeden Benutzer (in der Hauptbenutzertabelle), damit jeder Datensatz eindeutig ist (UID). Dann referenzieren Sie in den anderen Tabellen mit dieser eindeutigen ID. Stellen Sie dann sicher, dass in jeder Tabelle, die Sie als PRIMARY KEY festgelegt haben, die Verarbeitung der Informationen auf dem Datenbankserver beschleunigt wird. Sie können von Drupal CMS lernen, wie die Benutzerinformationen gespeichert werden. In mehr als 10 Jahren von Millionen von Anwendern und sehr großen Unternehmen getestet (von großen Medienunternehmen, Behörden, sogar den größten Banken der Welt). Auf www.drupal. In einer Tabelle sind mehr als 1,6 Millionen Seiten (Knoten) gespeichert, und es werden monatlich mehr als Millionen eindeutige Besucher gezählt. Die Website funktioniert einwandfrei. Alles dreht sich um die richtige Optimierung und Konfiguration.
Wenn Sie nach 10 Millionen Datensätzen mit der Leistung nicht zufrieden sind (nach einer ordnungsgemäßen Optimierung und Änderungen der Datenbankkonfiguration), können Sie entscheiden, ob Sie Benutzer wirklich nach verschiedenen Tabellen trennen möchten. Sie können die Funktionalität also tatsächlich erweitern, indem Sie eine neue Tabelle hinzufügen, die Informationen darüber enthält, wo die Benutzerdatensätze gespeichert sind: UID und Tabellenname. Fordern Sie dann in einer beliebigen anderen Tabelle diese Informationen an, sucht diese Tabelle nach der richtigen Tabelle. Aber ich rate Ihnen wirklich, einen großen Tisch für Benutzer zu haben, es sei denn, Sie haben mehr als 10-100 Millionen Datensätze. Die Leistung wird dadurch jedoch nicht wesentlich verbessert (Datenbanken sind so konzipiert, dass sie mit den großen Datenmengen umgehen können). Es ist besser, die Informationen einfach zu halten. Normalerweise entscheiden sich Unternehmen einfach für einen anderen Datenbankserver (Master und Slaves) und einen anderen. Arbeiten mit der Lastausgleichsfunktion zusammen. Wenn Sie diese 10 Millionen Benutzer haben, könnten Sie für einen anderen Datenbankserver bezahlen, oder?
Siehe das Beispiel des
user
Tabellenschemas in der Datei user.install .quelle
Wie die anderen Antworten andeuten, ist es keine gute Idee, die Benutzer in mehrere Tabellen aufzuteilen. Die meisten Datenbanken mit Indizes auf der Benutzer-ID können Millionen Zeilen verarbeiten. Die Wartezeit pro Abfrage kann sich jedoch in Abhängigkeit von der Gesamtzahl der Einträge im Index erhöhen. Solange das Dataset klein ist, können Sie mit einer einzelnen Tabelle in normalen Datenbanken arbeiten.
Ich werde versuchen, auch für Ihre künftige Überlegung eine andere Idee einzubringen, wenn Sie weit über eine Million Datensätze hinauswachsen. Bei solch einer großen Anzahl von Kunden möchten Sie keine Ausfallzeiten usw. Also gibt es eine Reihe von NOSQL-Datenbanken, die Sie sich ansehen möchten. Sie erledigen das Sharding für Sie, anstatt dass Sie das Sharding selbst aus der Anwendung heraus verwalten. Sie sorgen außerdem für Datenredundanz und damit für eine längere Betriebszeit. Facebook und alle verwenden Memcache usw. für ihren Cache. Aber ich bin mir nicht sicher, was sie für ihren permanenten Laden verwenden.
Eine wichtige Sache, die Sie beachten sollten, ist, dass Sie keine Joins usw. mit NOSQL-Datenbanken ausführen können. Planen Sie also Ihren Verwendungszweck und entscheiden Sie. Wenn Verknüpfungen und Transaktionen mit mehreren Datensätzen für Sie eine Notwendigkeit sind, sind NOSQL-Datenbanken nichts für Sie.
quelle
Warum nicht anhand des alphabetischen Bereichs teilen? Wenn Sie Millionen von Benutzern haben, erstellen Sie für jeden Buchstaben oder für jedes Buchstabenpaar eine separate Tabelle (Tabelle 'a' für Benutzer, deren Benutzername mit 'a' beginnt). Anfangs wird es viel Aufwand bedeuten, aber da Sie eine große Datenbank erwarten und in der Lage sein möchten, zu unterscheiden, welche Tabelle für einen bestimmten Benutzer verwendet werden soll, ist die alphabetische Reihenfolge die naheliegende und einfachste Wahl.
quelle