Ich richte eine Datenbank ein, von der ich annehme, dass sie ziemlich groß ist und für Berechnungen und Datenspeicherung verwendet wird. Es wird eine Tabelle mit vielleicht 10 Feldern sein, die einen Primärschlüssel und zwei Fremdschlüssel für sich selbst enthält. Ich gehe davon aus, dass täglich etwa eine Milliarde Datensätze hinzugefügt werden.
Jeder Datensatz sollte ziemlich klein sein, und ich werde hauptsächlich Inserts machen. Mit jedem Einfügen muss ich ein einfaches Update für ein oder zwei Felder eines verbundenen Datensatzes machen. Alle Abfragen sollten relativ einfach sein.
Bei welcher Größe fange ich an, Leistungsprobleme mit SQL-Server zu bekommen? Ich habe erwähnt, vldb Systeme, aber auch gehört, dass sie ein echter Schmerz sein können. Gibt es eine Schwelle, wo ich anfangen sollte, das zu betrachten? Gibt es eine bessere db als sql-Server, die für diese Art von Sache entwickelt wurde?
Wenn Sie über Transaktionsraten von über 10k / sec sprechen, sollten Sie in Foren keine Ratschläge geben ... Das ist nahe an der TPC-C-Benchmark-Leistung auf 32- und 64-Wege-Systemen, die Millionen kosten.
>Bei welcher Größe werden Sie Probleme bekommen?
Mit einem guten Datenmodell und Schemadesign wird ein ordnungsgemäß geplanter und mit der richtigen Kapazität geplanter Server für 1 Milliarde keine Probleme verursachen. Aufzeichnungen pro Tag. Die neuesten veröffentlichten SQL Server-Benchmarks liegen bei ca. 1,2 mil / min. Das sind etwa 16.000 Transaktionen pro Sekunde, bei einem Systempreis von USD ~ 6 Mio. im Jahr 2005 (64-Wege-Superdome). Um 10k pro Sekunde für Ihre geplante Last zu erreichen, brauchen Sie keinen Superdome, aber Sie werden ein ziemlich bulliges System (mindestens 16-fach wahrscheinlich) und besonders ein sehr, sehr gutes I / O-Subsystem brauchen. Wenn man die Hüllkurven-Kapazitätsplanung rückgängig macht, betrachtet man üblicherweise 1 Kt / Sek. Pro HBA und 4 CPU-Kerne, um den HBA zu speisen. Und Sie werden ziemlich viele Datenbank-Clients (Anwendung Mid-Tiers) benötigen, um 1 Milliarde zu füttern. Datensätze pro Tag in die Datenbank. Ich behaupte nicht, dass ich hier Ihre Kapazitätsplanung gemacht habe, aber ich wollte Ihnen nur einen Überblick darüber geben, worüber wir sprechen. Dies ist ein Multi-Millionen-Dollar-Projekt, und so etwas wird nicht entworfen, indem man in Foren Ratschläge gibt.
Wenn Sie nicht so groß wie Google in der Art des großen Index sprechen, werden die Enterprise-Datenbanken wie SQL Server oder Oracle problemlos funktionieren.
James Devlin bei Coding the Wheel fasste es gut zusammen (obwohl das so ist) mehr von einem Vergleich zwischen freien Datenbanken wie MySQL mit Oracle / SQL ServerHeutzutage denke ich gerne an SQL Server und Oracle als die Todessterne des relationalen Datenbankuniversums. Extrem stark. Monolithisch. Brillant. Komplex fast jenseits der Fähigkeit eines einzelnen menschlichen Geistes zu verstehen. Und eine monumentale Geldverschwendung, außer in diesen seltenen Situationen, in denen du tatsächlich einen Planeten zerstören musst.
Was die Leistung angeht, hängt alles von Ihrer Indexierungsstrategie ab. Inserts sind hier wirklich der Flaschenhals, da die Datensätze indiziert werden müssen, sobald sie eingehen, je mehr Indexierung Sie haben, desto länger dauert das Einfügen.
Im Fall von etwas wie dem Google-Index, lesen Sie auf "Big Table", es ist interessant, wie Google es eingerichtet hat, Cluster von Servern zu verwenden, um die Suche nach enormen Datenmengen in Millisekunden durchzuführen.
Es kann getan werden, aber angesichts Ihrer Hardware-Kosten und Pläne erhalten MS in die Dinge für Sie aus. Es wird ein Bruchteil Ihrer Hardwarekosten sein.
Das sagen Paul Nielson bloggte über 35k TPS (3 Milliarden Zeilen pro Tag) vor zwei Jahren. Kommentare, die es wert sind, gelesen zu werden und etwas von dem zu reflektieren, was Remus gesagt hat
Die Größe der Datenbank selbst verursacht kein Leistungsproblem. Praktische Probleme bei der Datenbankgröße ergeben sich aus Betriebs- / Wartungsproblemen.
Zum Beispiel:
Ich würde empfehlen, von Anfang an eine Partitionierung durchzuführen. Dies kann SQL Server-Partitionierung, Anwendungspartitionierung (z. B. eine Tabelle pro Monat), Archivierung (z. B. in eine andere Datenbank) sein.
Ich glaube, dass diese Probleme in jedem Datenbankprodukt auftreten.
Achten Sie außerdem darauf, dass die Größe der Transaktionsprotokolldateien berücksichtigt wird.
Tags und Links sql-server database-design