Empfehlung zur Datenbanktechnologie für den Simulator

Okay, also entwickle ich eine Simulationsanwendung und muss wissen, welche Datenbank ratsam ist (oder die Vor- und Nachteile einiger Optionen).

tl;dr:

  • C#-Anwendung
  • Nur die Anwendung wird es verwenden
  • Nur lokaler Computer (wird ein Server sein).
  • 4-2000 potenzielle "Versionen" der Datenbank, die gleichzeitig erstellt wurden.
  • Daten müssen nicht außerhalb der ausgeführten Anwendung aufbewahrt werden.

Alle Einzelheiten:

  • C#-Anwendung, die der einzige „Benutzer“ der Datenbank sein wird. (Es muss also nur lokal zugänglich sein)
  • Sie müssen den tatsächlichen Benutzern keine "Ausgabe" der Datenbank bereitstellen, sondern nur die Anwendung.
  • Simuliert 500.000++ "Knoten"
  • Ca. 30/70 Lese-/Schreibverhältnis.
  • Sie müssen eine Reihe verschiedener Simulationen erstellen und möglicherweise eine Simulation in zwei Simulationen aufteilen, von denen jede ein bestimmtes Kriterium testet. Jede "Simulation" müsste wahrscheinlich eine separate Datenbank sein (oder vielleicht wäre es möglich, Ansichten zu verwenden).
  • Sie müssen in der Lage sein, eine Datenbank (oder Ansichten/Tabellen/Simulationen) im Handumdrehen zu erstellen.
  • Es muss nur der "Status" der Simulation wirklich gespeichert werden, was einige Felder (String/Int usw.) für jeden Knoten bedeutet. Das bedeutet, dass wir die historischen Zustände des Objekts beibehalten müssen.
  • Die Simulation ist ereignisgesteuert, sodass die Ausgabe von der CPU-Geschwindigkeit bestimmt wird.
  • Irgendwo zwischen 4 und 2000 Simulationen können gleichzeitig ausgeführt werden.

Einige der wichtigsten, die ich mir angesehen habe, sind SQLLite und SQL Server, aber dies basiert mehr auf der Erfahrung meiner Mitarbeiter, Support zu leisten. Einer der anderen Faktoren, die wir berücksichtigen, ist, dass die Datenbank im Speicher arbeitet.

Wie auch immer, genug von mir. Was empfehlen Sie bzw. was sind die Vor- und Nachteile der verfügbaren Optionen? Oh, und bei Fragen zu weiteren Details schießen Sie bitte weg.

EDIT: Auf Anfrage hier eine extrem geschätzte Eingabemenge pro Sekunde:Geben Sie hier die Bildbeschreibung ein

Methodik: Ich lasse den Simulationsprototyp 5 Minuten lang laufen, um herauszufinden, wie viele Variablen jedes Typs wir verwenden, und dividiere das dann durch 300, um den Wert der Variablen pro Sekunde zu erhalten. Ich habe dann mit 4 multipliziert, weil ich erwarte, dass die Daten, die wir speichern möchten, um das 4-fache wachsen (auf längere Sicht möglicherweise etwas konservativ).

"Jede "Simulation" müsste wahrscheinlich eine separate Datenbank sein" Versuchen Sie, dies zu vermeiden, es ist viel mühsamer, als nur Ihre Tabellenstruktur korrekt zu definieren und alles in einer DB zu haben.
Aus Ihren Anforderungen geht nicht ganz hervor, wie viele Daten in wie viel Zeit (gleichzeitig) gelesen / geschrieben werden müssen. Selbst wenn es CPU-begrenzt ist, wäre eine Schätzung gut. Kannst du das bearbeiten und hinzufügen? Ausgehend von Ihren Zahlen würde ich SQLite ausschließen, Sie brauchen etwas Schwereres.
@JanDoggen Ich werde heute einige Tests durchführen, um abzuschätzen, wie viele Daten geschrieben/gelesen werden. Aber warum ist SQLLite für diese Datenmenge ungeeignet?

Antworten (1)

Ich verwende PostgreSQL (Open-Source-Datenbank) auf meiner VB.NET-Desktop-Anwendung.


Ich denke, Sie benötigen eine eingebettete Datenbank für die Verwendung in der Anwendung, Microsoft SQL Server Compact, wenn Sie nichts auf der Benutzerseite installieren möchten

Firebird eingebettet

Firebird Embedded ist eine relationale Datenbank-Engine. Es ist ein Open-Source-Fork von InterBase, ist ACID-kompatibel, unterstützt Trigger und gespeicherte Prozeduren und ist auf Linux-, OSX- und Windows-Systemen verfügbar. Es hat die gleichen Funktionen wie die klassische und die Superserver-Version von Firebird, zwei oder mehr Threads (und Anwendungen) können ab Firebird 2.5 gleichzeitig auf dieselbe Datenbank zugreifen. Firebird Embedded fungiert also als lokaler Server für einen Client mit Threads, der auf seine Datenbanken zugreift (das heißt, es funktioniert ordnungsgemäß für ASP.NET-Webanwendungen, da dort jeder Benutzer seinen eigenen Thread hat, was bedeutet, dass zwei Benutzer gleichzeitig auf dieselbe Datenbank zugreifen können Zeit, aber sie würden sich nicht im selben Thread befinden, da ASP.NET für jeden Benutzer einen neuen Thread öffnet). Es exportiert die standardmäßigen Firebird-API-Einstiegspunkte.

VistaDB

VistaDB ist eine eingebettete SQL-Datenbank, die vollständig in C# geschrieben ist und eine Reihe von Funktionen unterstützt, um sie mit SQL Server kompatibel zu machen, wie T-SQL-Datentypen und -Syntax. Das Produkt läuft auf .NET-Plattformen, einschließlich Mono. Es ist seit 2004 auf dem Markt und wird von vielen Unternehmen eingesetzt

Durchsuchen Sie die eingebettete Datenbank nach weiteren Optionen