Einzelnen Beitrag anzeigen

Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
435 Beiträge
 
Delphi 12 Athens
 
#25

AW: Hunderte Clients im Sekundentakt über gesperrte Datensätze informieren

  Alt 21. Jun 2024, 09:43
Ich versuche mal eine kurze Zusammenfassung:
  • Nur beim Start der Clientanwendung wird die Liste mit den 10.000 Datensätzen in ein 2D-Array geladen und dann in einer ListView angezeigt
  • Auf dem SQL-Server wird eine separate Sperrliste inkl. RecID, Sperrstatus (gesperrt/aufgehoben) und Timestamp geführt.
  • Jede Clientanwendung trägt neue Sperrungen oder Aufhebungen in die separate Sperrliste per StoredProcedure ein
  • Alle Clientanwendungen fragen die Sperrliste regelmäßig oder bei Bedarf über eine StoredProcedure ab und ermitteln alle Änderungen (Sperrungen/Aufhebungen) seit dem letzten Abruf der Sperrliste (Letzter Timestamp als Parameter).
Ein Problem habe ich aber immer noch:
Stellen wir uns das mal praktisch vor: In einer Kiste liegen viele Teile, die ziemlich zügig und von vielen Mitarbeitern bearbeitet werden müssen. Ein Mitarbeiter nimmt sich ein Teil aus der Kiste um es zu bearbeiten. Und schon in diesem Augenblick muss feststehen (er sieht es ja auch), dass kein anderer Mitarbeiter dieses Teil in der Hand hat. Würde er es erst merken, wenn er das Teil in der Hand hält und müsste es dann zurücklegen, wäre wertvolle Arbeitszeit verschwendet worden. Daher müsste unsere Clientanwendung immer sehr zeitnah über Sperrungen informiert werden.

Und das habe ich euch verschwiegen: Unsere Datenbanken laufen auf SQL-Servern, auf denen noch zahlreiche andere Datenbanken der Kunden laufen. Wenn jede Clientanwendung 1 x pro Sekunde die Sperr-Procedure abfragen würde, wären das locker 100 Abfragen pro Sekunden oder 6.000 pro Minute. Selbst wenn das hyper-performant wäre, würde der SQL-Admin schon bei der kleinsten Störung irgendeiner DB bei mir anrufen, weil auf unserer DB so viel Betrieb ist.

Daher hatte mir die UDP-Broadcast-Idee ziemlich gut gefallen - wenn sie denn zuverlässig funktionieren würde. Damit gäbe es dann eine aktive Sperrbenachrichtigung und im Netzwerk würde sich nur etwas tun, wenn jemand tatsächlich arbeitet. Ansonsten wäre Funkstelle.

Sieht so aus, als müsste man dann doch einen separaten TCP-Server oder so basteln, an dem sich alle Clients anmelden und aktiv über die Sperrungen benachrichtigt werden. Das scheint mir dann aber doch etwas zu aufwändig für so verrückte Kundenideen.

Nochmals vielen Dank für eure Vorschläge.
  Mit Zitat antworten Zitat