Ich bin neu im Datenbanksystemdesign. Nachdem ich viele Artikel gelesen habe, bin ich wirklich verwirrt, wie hoch die Grenze ist, die wir für eine Tabelle ohne Sharding oder Partitionierung haben sollten. Ich weiß, dass es wirklich schwierig ist, eine allgemeingültige Antwort zu geben, die Dinge hängen von Faktoren wie
ab
- Zeilengröße
- Datentyp (String, Blob usw.)
- Anzahl aktiver Anfragen
- Was für eine Anfrage
- Index
- Neu lesen/neu schreiben
- Erwartete Verzögerungen
Aber wenn jemand diese Frage stellt
- Was würden Sie tun, wenn jeden Tag 1 Milliarde Daten und Millionen Zeilen hinzugefügt würden? Bei einer so großen Datenbank muss die Latenz für eine Abfrage mit vier Lesevorgängen, einem Schreibvorgang und zwei Aktualisierungsabfragen weniger als 5 Millisekunden betragen.
- Wenn Sie nur 10 Millionen Zeilen, aber ein hohes Aktualisierungs- und Lesevolumen hätten, was würden Sie wählen? Die Anzahl der hinzugefügten neuen Zeilen spielt keine Rolle. Hohe Konsistenz und geringe Latenz sind Anforderungen.
Wenn die Anzahl der Zeilen weniger als eine Million beträgt und die Zeilengröße um Tausende zunimmt, ist die Auswahl einfach. Schwieriger wird es jedoch, wenn die Auswahl Millionen oder Milliarden Zeilen umfasst.
Hinweis: Ich habe die Verzögerungsnummer in der Frage nicht erwähnt. Bitte
Antworten Sie basierend auf der Anzahl der Verzögerungen, mit denen Sie zufrieden sind. Außerdem sprechen wir über strukturierte Daten.
Ich bin mir nicht sicher, aber ich kann drei spezifische Fragen hinzufügen:
- Angenommen, Sie entscheiden sich für eine SQL-Datenbank für Amazon oder ein anderes E-Commerce-Auftragsverwaltungssystem. Die Zahl der Bestellungen wächst täglich um Millionen. Es gibt bereits 1 Milliarde Datensätze. Nehmen wir nun an, dass kein Datenarchiv vorhanden ist. High-Read-Abfragen mit über tausend Abfragen pro Sekunde. Und auch geschrieben. Das Lese-/Schreibverhältnis beträgt 100:1
- Nehmen wir ein Beispiel einer jetzt kleineren Zahl. Angenommen, Sie wählen eine SQL-Datenbank für abc oder ein anderes E-Commerce-Auftragsverwaltungssystem. Die Zahl der Bestellungen steigt täglich um Tausende. Es gibt bereits 10 Millionen Datensätze. Nehmen wir nun an, dass kein Datenarchiv vorhanden ist. High-Read-Abfragen mit über zehntausend Abfragen pro Sekunde. Und auch geschrieben. Das Lese- und Schreibverhältnis beträgt 10:1
- Drittes Beispiel: Freebie-Verteilung. Wir haben 10 Millionen Goodies zu verschenken. 1 Goody pro Benutzer. Hohe Konsistenz und geringe Latenz sind die Ziele. Gehen wir davon aus, dass bereits 20 Millionen Nutzer auf die kostenlose Verteilung warten, werden alle, sobald die Zeit beginnt, versuchen, an die kostenlosen Extras zu kommen.
Hinweis: Bei dieser Frage wird davon ausgegangen, dass wir eine Auswahl treffen
SQL-Lösung. Auch wenn der bereitgestellte Anwendungsfall keinen logischen Sinn ergibt, ignorieren Sie ihn. Ziel ist der Erwerb numerischer Kenntnisse.
Kann mir jemand helfen, den Benchmark zu verstehen? Alle reellen Zahlen aus dem Projekt, an dem Sie gerade arbeiten, zeigen, dass es sich bei einer großen Datenbank mit so vielen Abfragen um die beobachtete Latenz handelt. Alles, was mir helfen kann, die Anzahl der ausgewählten Tabellen für eine bestimmte Anzahl von Abfragen und eine bestimmte Latenz zu rechtfertigen.
MySQL 的一些答案。由于所有数据库都受到磁盘空间、网络延迟等限制,其他引擎可能类似。
SELECT
是可能的。所以你需要了解查询是否是这样病态的。 (我认为这是高“延迟”的一个例子。)PARTITIONing
(尤其是在 MySQL 中)的用途很少。更多详细信息:分区INDEX
对于性能非常重要。每天插入
一百万行不是问题。 (当然,有些模式设计可能会导致这个问题。)经验法则:100/秒可能不是问题; 1000/秒可能是可能的;之后就变得更难了。更多关于高速摄取当您进入大型数据库时,它们分为几种不同的类型;每个都有一些不同的特征。
SPATIAL
或一些技术 此处