Vor einiger Zeit dachte ich, ein neues Statistiksystem für unsere Multi-Millionen-Benutzer-Website, um Benutzeraktionen für unsere Kunden zu protokollieren und zu melden.30 Millionen Datensätze pro Tag, SQL Server kann nicht mithalten, andere Arten von Datenbanksystemen benötigt?
Das Datenbank-Design ist recht einfach und enthält eine Tabelle mit einer foreignId (200.000 verschiedene IDs), einem datetime-Feld, einer actionId (30 verschiedene IDs) und zwei weiteren Feldern mit einigen Meta-Informationen (nur kleine). . Für andere Tabellen gibt es keine Einschränkungen. Außerdem haben wir zwei Indizes, die jeweils 4 Felder enthalten, die nicht gelöscht werden können, da die Benutzer bei kleineren Indizes Timeouts erhalten. Die foreignId ist das wichtigste Feld, da jede Abfrage dieses Feld enthält.
Wir haben uns für den SQL Server entschieden, aber nach der Implementierung scheint eine relationale Datenbank nicht perfekt zu passen, da wir 30 Millionen Datensätze pro Tag nicht einfügen können (es ist nur Einfügung, wir machen keine Updates) viel zufällige Lesevorgänge in der Datenbank; weil die Indizes nicht schnell genug aktualisiert werden können. Ergo: Wir haben ein massives Problem :-) Wir haben das Problem vorübergehend gelöst, aber
eine relationale Datenbank scheint nicht für dieses Problem geeignet sein!
Wäre eine Datenbank wie BigTable eine bessere Wahl, und warum? Oder gibt es andere, bessere Entscheidungen im Umgang mit dieser Art von Problemen?
NB. An dieser Stelle verwenden wir ein einzelnes 8-Kern-Xeon-System mit 4 GB Speicher und Win 2003 32-Bit. RAID10 SCSI soweit ich weiß. Die Indexgröße beträgt etwa das 1,5-fache der Tabellengröße.
Was meinst du damit, dass es "nicht mithalten kann?" Was scheitert? Ist Netzwerk-E/A ein Problem? Sind Sie an CPU-Auslastung gebunden? Reagiert es bei normaler Nutzung auf allen Hardwaresystemen nicht schnell genug? Dies kann ein Serverproblem sein. Was sind Ihre DB-Serverspezifikationen? –
Sein Problem scheint ein Ergebnis des Index-Overheads zu sein. Er kann seine Indizes nicht loswerden, aber das Aktualisieren von Indizes auf einem riesigen Tisch 30 Millionen Mal am Tag ist teuer. – timdev
Es gibt keinen Grund, warum SQL Server dies nicht kann. Ich muss entweder feststellen, dass entweder das Datendesign oder die Konfiguration das Problem ist. Können Sie uns bitte das CREATE-Skript der Tabelle zusammen mit den Schlüsseln und Indizes sowie den Indizes für die beiden verwandten Tabellen zeigen? – RBarryYoung