Ich versuche, ein Event-Sourcing-System mit Postgres zu implementieren. Der beste Weg zu erklären ist ein Beispiel. Nehmen wir an, dass meine Ereignisse irgendwann eine Person beschreiben müssen. Und ich habe die folgenden Ereignisse:Event Sourcing mit inkonsistentem Verhalten von Ereignissen
- PersonCreatedEvent (Wert = 100, Bereich = "id", date = ..)
- AgeUpdated (Wert = 10, Bereich = "Alter", date = ..)
- LastNameUpdate (value = "newLastName", Feld = "Nachname", date = ..)
- LocationUpdated (Wert = (lat, long), Feld = "location", date = ..)
- BalanceUpdated (Wert = 1000, Feld = "Balance", Datum = ..)
Ereignis 1 wird nur einmal im Leben einer Person vorkommen.
Ereignisse 2 - 3 Kann mehrmals vorkommen.
Ereignisse 4 - 5 Kann viele Male passieren.
Am Ende des Tages, werde ich mit einem Tisch am Ende, die mit Ereignissen 4 und 5
so konsequent vor allem, wenn ich 10 Millionen Menschen in meinem Tisch habe, könnte ich Milliarden von Ereignissen während 99% von ihnen sind im Grunde 4 und 5. Dies wird zu einem riesigen Datenspeicher, nicht sicher, dass Postgres damit schön spielen wird. (Es kann .. aber mit erheblichen Arbeit \ Infrastruktur erhöhen.)
Dies ist nur ein Beispiel, meine Entität könnte aus 100 Feldern kombiniert werden, was mindestens 100 Ereignisse pro Einheit bedeutet. Einige der Felder haben die Merkmale der Ereignisse 4 und 5.
Der Mehrwert der Verwendung von Event Sourcing in meinem Fall ist, dass ich eine Geschichte inhärent auf meine Entität, die eine Produktanforderung in meinem Fall ist.
Was ist die beste Vorgehensweise in diesem Fall? Vielleicht häufiger Eigenschaften sollten anderswo behandelt werden?
UPDATE: Ein anderes Beispiel ist ein Geräteaggregat.
- DeviceManufacturerUpdated (value = "cisco", Feld = "Hersteller", date = ..)
- DeviceNameUpdated (value = "foo", Feld = "name", date = ...)
- DeviceIpUpdated (value = "1.1.1.1", Feld = "ip", date = ...)
- DeviceLocationUpdated (value = "neuen Standort", Feld = "location", date = ...)
- DeviceLastSeenUpdated (Wert = "irgendein Datum", field = "last_seen", Datum = ...)
Hier gilt das gleiche 1. Ereignis 1 kann 5 mehrmals täglich mehrmals Heppen 3. Ereignis 3 Heppen kann 4. Ereignis 4 kann Heppen täglich Heppen einmal 2. Ereignis 2 können.Ereignis 5 kann jede Minute
Heppen wenn ich das über Postgress bin der Umsetzung ich mit einem riesigen Tisch wird am Ende meist enthält Ereignisse 4 und 5.
Snapshot könnte helfen, aber ich nehme an, in einem bestimmten Punkt muss ich etwas mit der Größe meiner Datenbank tun. (Die Größe ist ein Ergebnis des "Typs" der Ereignisse, die ich fortsetze). Also wird irgendwann ein Snapshot übrig bleiben, aber ich werde die History-Funktionen verlieren (nach dem Löschen von Ereignissen). Es fühlt sich an, als würde ich etwas falsch machen, wenn mein Tisch zu 99% aus demselben Ereignistyp besteht. es fühlt sich an, als ob es einen Raum für eine Optimierung gibt, die mir nicht bekannt ist ..: - | Was denken Sie? – Tomer