Ich bin Event-Sourcing-Architektur implementieren und meine Aggregate wird große Menge an Datensätzen im Speicher enthalten. Um zu testen, wie gut .NET speichert große Menge von Datensätzen im Speicher, habe ich ein einfaches Programm:Event Sourcing: Overhead mit Speichern einer großen Menge von Datensätzen im Speicher
static void Main(string[] args)
{
Dictionary<string, object> dict = new Dictionary<string, object>();
int maxRecords = 100000000;
for (int i = 0; i < maxRecords; i++)
{
dict.Add(i.ToString(), new String('A', 10));
}
Console.WriteLine("Done");
Console.ReadLine();
}
In der Konfigurationsdatei, die ich habe:
<runtime>
<gcAllowVeryLargeObjects enabled="true" />
</runtime>
Also ich bin zu speichern 100 Millionen Datensätze und jeder Datensatz ist 10 Bytes (sagen wir 20, weil es wahrscheinlich Unicode ist). So speichere ich etwa 2 GB Daten im Speicher. Die Anwendung wächst jedoch auf 15 GB.
Idealerweise würde ich gerne Dinge in einem IDictionary speichern. Kann ich etwas tun, um den Overhead zu reduzieren?
Wenn jemand an einer Event-Sourcing-Architektur gearbeitet hat, die große Datenmengen im Speicher speichert, teilen Sie uns bitte Ihre Erfahrung damit mit und wie Sie Ihre Aggregate strukturiert haben.
Warum würden Sie Aggregate im Speicher speichern? –
Wenn ich Aggregate in einer Datenbank speichere, verliere ich dann einige der Vorteile von Event Sourcing, als ob ich keine CRUD-Operationen und objektrelationales Mapping durchführen müsste? – Sandy
Sie verlieren nichts und Sie erhalten Skalierbarkeit. –