Wir haben einen externen Dienst, der uns kontinuierlich Daten sendet. Der Einfachheit halber lässt sich sagen, dass diese Daten drei Zeichenfolgen in tabulatorgetrennter Form aufweisen.Duplikate aus einem Stream
Diese Daten werden von einem unserer Server empfangen und dann an eine Verarbeitungs-Engine weitergeleitet, wo mit diesem Datensatz eine sinnvolle Aussage getroffen wird.
Eine der Anforderungen der Verarbeitungs-Engine besteht darin, dass doppelte Ergebnisse von der Verarbeitungs-Engine nicht verarbeitet werden. So erhielt die Verarbeitungsmaschine beispielsweise am Tag 1 A B C
, und am Tag 243 wurde dieselbe A B C
vom Server empfangen. In dieser speziellen Situation wird die Verarbeitungs-Engine eine Warnung "Datensatz bereits verarbeitet" ausspucken und diesen bestimmten Datensatz nicht verarbeiten.
Es kann ein paar Möglichkeiten, dieses Problem zu lösen:
Speichern Sie die eingehenden Daten in einem In-Memory-HashSet und stellen exculsion wird den Bearbeitungsstatus des bestimmten Datensatz anzuzeigen. Probleme treten auf, wenn dieser Dienst mit einer Ausfallzeit von ausgeführt wird. Je nach Datenstoss kann diese Sammlung die Speichergrenzen überschreiten. Im Falle von Systemausfällen müssen diese Daten auch an einem anderen Ort gespeichert werden.
Speichern Sie die eingehenden Daten in der Datenbank und der nächste Satz von Daten wird nur verarbeitet werden, wenn die Daten nicht in der Datenbank vorhanden sind. Diese
hilft mit der Haltbarkeit der Geschichte im Falle einer Katastrophe , aber es gibt den Overhead der Aufrechterhaltung der richtigen Indizes und aggressive Sharing bei leistungsbezogenen Problemen.
.... oder eine andere Technik
Kann jemand einige Fallstudien oder etablierte Muster oder Praktiken dieses besondere Problem zu lösen hinweisen?
Dank
Dank! Dies scheint ein Schritt in die richtige Richtung zu sein. –