2009-09-23 5 views
13

Ich habe eine Log-Tabelle, die Einsätze von mehreren Web-Apps erhalten wird. Ich werde keine Suche/Sortierung/Abfrage dieser Daten durchführen. Ich werde die Daten in eine andere Datenbank übertragen, um Berichte zu erstellen. Die anfängliche Tabelle dient ausschließlich zum Empfangen der Protokollnachrichten.Wie kann eine Tabelle nur für schnelle Einfügungen optimiert werden?

Gibt es eine Möglichkeit sicherzustellen, dass die Webanwendungen nicht auf diese Einsätze warten müssen? Zum Beispiel weiß ich, dass das Hinzufügen vieler Indizes Einfügungen verlangsamen würde, also werde ich nicht. Was gibt es noch? Sollte ich keinen Primärschlüssel hinzufügen? (Jede Nacht wird die Tabelle in eine Berichte DB gepumpt werden, was eine Menge Tasten/Indizes haben)

+3

Warum überhaupt Gebrauch SQL? Warum nicht einfach in Dateien schreiben, um sie in die Berichts-DB zu laden? –

+0

Um ehrlich zu sein, obwohl ich keine normalen Log-Dateien verwende, werde ich das untersuchen. –

+0

Sie können SQL mit sotrage engine = ARCHIVE verwenden. –

Antwort

9

Wenn die Leistung Schlüssel ist, können Sie nicht diese Daten in eine Datenbank geschrieben werden soll. Ich denke, dass alles eine Datenbank schreiben wird als eine Rundreise, aber es klingt, als ob Sie nicht auf die zurückgegebene Bestätigungsnachricht warten möchten. Überprüfen Sie, ob es, wie S. Lott vorschlägt, nicht schneller ist, einfach eine Zeile an eine einfache Textdatei anzuhängen.

Wenn die Datenbank schreiben schneller ist (oder aus Sicherheitsgründen oder aus anderen geschäftlichen/betrieblichen Gründen notwendig), würde ich keine Indizes auf die Tabelle setzen - und das schließt einen Primärschlüssel ein. Wenn es nicht für Lesevorgänge oder Aktualisierungen verwendet wird und Sie keine relationale Integrität benötigen, benötigen Sie nur eine PK für diese Tabelle.

Um das Offensichtliche zu empfehlen: als Teil der nächtlichen Berichte ausführen, löschen Sie den Inhalt der Tabelle. Setzen Sie auch nie die Datenbank Datei Größen (ye olde shrink Datenbankbefehl); nach einer Woche oder so der regelmäßigen Verwendung sollten die Datenbankdateien so groß sein, wie sie jemals benötigt werden, und Sie müssen sich keine Gedanken über den Leistungsanstieg der Dateientwicklung machen.

5

Hier sind ein paar Ideen, Anmerkung für die letzten, die wichtig zu sein: Super hohe volumns hätte:

  • keinen Primärschlüssel haben, wird es über einen Index
  • haben andere Index nicht
  • groß genug, dass Sie keine Datenbankwachstum
  • Legen Sie die Datenbank auf seine eigene erstellen der Datenbank erzwungen Festplatte zur Vermeidung von Konflikten
  • Vermeiden Sie Software-RAID
  • Stelle die Datenbank auf einer gespiegelten Festplatte, speichert die Rechen 5 auf RAID getan
4

Keine Schlüssel, keine Einschränkungen, keine Validierung, keine Trigger, keine berechneten Spalten

Wenn Sie können, haben die Dienste Einsatz async, um nicht auf die Ergebnisse zu warten (wenn das akzeptabel ist,).

Sie können sogar versuchen, in eine "tägliche" Tabelle einzufügen, die dann weniger Datensätze sein sollte, und dann verschieben, bevor der Stapel in der Nacht ausgeführt wird.

Aber meistens auf dem Tisch keine Tasten/Validation (PK und Eindeutige Indizes Sie töten)

+0

In einer Internet 24/7-Welt gibt es keine Vorstellung mehr von Tag zu Nacht.Wie würden Sie "alte" Informationen verschieben (aber immer noch in einer Datenbank speichern)? ständig? alle X Minuten? irgendwelche Gedanken? –

Verwandte Themen