2010-12-12 15 views
0

Wir arbeiten an einer Webanwendung, die auf .NET und SQL Server basiert. In der Produktionsumgebung würden die Datenbank und der Webserver auf verschiedenen Systemen ausgeführt werden.beste Möglichkeit zum Synchronisieren der Daten zwischen Business und Datenbank

Angesichts dieser, was wäre der beste Weg, um sicherzustellen, dass das Datum und die Zeit zwischen der Business-Logik-Ebene (läuft auf dem Webserver) und dem Datenbankserver synchronisiert werden?

Würde eine Abfrage an den Server mit SELECT GETDATE() effizient sein?

Zum Beispiel anstelle von Datum Zeit Eigenschaften in unseren Klassen zu DateTime.Now initialisieren wir mit DBServer.Now wo "Now" ist eine statische Eigenschaft, die die SELECT GETDATE() Abfrage auslösen würde und erhalten eine Antwort.

Danke.

+1

Seitennotiz- stellen Sie sicher, dass Sie sich mit Daten in UTC befassen, um Zeitzonenprobleme zu vermeiden. – MunkiPhD

Antwort

2

Je nachdem, wie genau Sie dies benötigen, sollte es ausreichend sein, dass die Computer einer Domäne angehören und die Uhrzeit mit dem Domänenserver synchronisiert wird. In diesem Setup synchronisieren die Worstations alle ihre Zeit mit dem primären Domänencontroller.

0

Je nachdem, wie genau Sie brauchen, anstatt DBServer.Now immer die Datenbank jedes Mal zu schlagen, vielleicht haben Sie den Unterschied zwischen der Datenbank und Webserver zwischenzuspeichern. Verwenden Sie dann den zwischengespeicherten Versatzwert, wenn Sie die Datenbankzeit benötigen. Berechnen Sie den zwischengespeicherten Wert alle X Minuten neu, um sie synchron zu halten.

+0

Nicht, dass dies eine gute Idee wäre, aber es ist eine Möglichkeit ... –

1

Mischen Sie nicht die beiden Quellen von Datumsinformationen. Verwenden Sie die Datetime-Implementierung Ihrer Entwicklungsumgebung (und nur diese) oder verwenden Sie die Implementierung Ihrer Datenbank. Auf diese Weise wissen Sie, dass die Datumswerte immer vom selben Ort kommen und die Zeiteinstellung auf dem Datenbankserver keine Rolle spielt. Es sollte keine große Hürde sein, die Verwendung von WHERE releaseDate < NOW() aufzuheben und stattdessen einen Datumsparameter aus der Anwendung zu verwenden.

Abgesehen von einer einzigen Quelle von Datumsinformationen, schiebt es Sie auch dazu, Daten auf die "richtige" Weise zu behandeln - mit korrekten Datentypen. Ich weiß nichts über .NET, aber ich habe in der PHP-Welt eine Menge von Datums-String-Spielen gesehen.

Eine andere Sache, die Sie tun können (und sollten), ist, Ihre Zeit auf allen Servern mit NTP - oder anderen Lösungen (siehe Chris Taylors Antwort) einzustellen.

Verwandte Themen