Ich verwende SQLite oft zum Erstellen einfacher Programme in Unternehmen. Die Datenbank wird auf einem Dateiserver abgelegt. Dies funktioniert einwandfrei, solange nicht mehr als 50 Benutzer gleichzeitig an der Datenbank arbeiten (je nachdem, ob sie gelesen oder geschrieben wird). Sobald es mehr als dies gibt, werden sie eine Verlangsamung bemerken, wenn viel gleichzeitig auf dem Server geschrieben wird, da viel Zeit für Sperren aufgewendet wird, und es gibt nichts Schöneres als einen Cache, da es keinen Datenbankserver gibt.
Der Vorteil, keinen Datenbankserver zu benötigen, besteht darin, dass die Zeit zum Einrichten eines Unternehmens-Wikis oder ähnlichem von mehreren Monaten auf nur wenige Tage reduziert werden kann. Es dauert oft mehrere Monate, da einige IT-Abteilungen den Server bestellen müssen und er den Unternehmensrichtlinien und Sicherheitsregeln entsprechen muss. Er muss auf der ausgelagerten Server-Hosting-Einrichtung platziert werden, die es vermasselt und an der falschen Stelle platziert usw. usw.
Daher habe ich mir überlegt, einen verteilten Datenbankserver zu erstellen. Der Prozess wäre wie folgt: Ein Benutzer auf einem Firmencomputer bearbeitet etwas auf einer Wiki-Seite (die diese Datenbank als Backend verwendet). Dazu liest er eine Datei auf der lokalen Festplatte, in der die IP-Adresse des letzten Desktop-Computers angegeben ist ein Datenbankserver sein. Anschließend versucht er, diesen Computer direkt über TCP / IP zu kontaktieren. Wenn es nicht antwortet, liest er eine Datei auf dem Dateiserver, in der die IP-Adresse des letzten Desktop-Computers angegeben ist, der ein Datenbankserver ist. Wenn dieser Server auch nicht antwortet, wird sein eigener Desktop-Computer zum Datenbankserver und registriert seine IP-Adresse in derselben Datei. Die SQL-Update-Anweisung kann dann ausgeführt werden, und andere Desktop-Computer können eine direkte Verbindung zu ihm herstellen.
Der Punkt bei dieser Architektur ist, dass je höher die Last, desto besser die Funktion ist, da jeder Desktop-Computer immer die IP-Adresse des Datenbankservers kennt. Mit diesem Setup glaube ich auch, dass eine Datenbank, die auf einem Dateiserver abgelegt ist, Hunderte von Desktop-Computern anstelle der aktuellen 50 oder so bedienen kann. Ich glaube auch nicht, dass die Belastung des einzelnen Desktop-Computers, der zum Datenbankserver geworden ist, jemals spürbar sein wird, da auf diesem Desktop keine Festplattenvorgänge ausgeführt werden, sondern nur auf dem Dateiserver.
Ist diese Idee machbar? Existiert es schon? Welche Art von Datenbank könnte eine solche Architektur unterstützen?
Bearbeiten: Ich sollte darauf hinweisen, dass diese Idee nicht hübsch, stabil, Best Practice oder etwas ist, auf das ich wirklich stolz sein würde. Der Grund, warum ich immer noch an der Machbarkeit interessiert bin, ist, dass einige meiner Kunden Banken sind und die Bürokratie, die mit dem Zugriff auf eine Datenbank verbunden ist, enorm ist. Oft muss der Projektsponsor für solche Projekte aufgrund seiner extremen Sicherheitsbedenken hinsichtlich des Zugriffs auf Server über dem Niveau des Vizepräsidenten liegen. Das bedeutet natürlich, dass es viel Arbeit gibt, ein Wiki einzurichten. Wenn sich das Wiki später als erfolgreich erweist, sollte es natürlich auf einen geeigneten Datenbankserver migriert werden.
Edit2: Der Grund für diese Idee besteht darin, das Risiko von Writer Starvation bei Verwendung von SQLite zu verringern, wenn die Datenbank auf dem Dateiserver abgelegt wird. Dieses Problem wird in Abschnitt 5.1 beschrieben hier . Die Verwendung eines Desktop-Computers für einen Cache mit den am häufigsten aufgerufenen Informationen (z. B. Wiki-Seiten) würde bedeuten, dass die Arbeitslast auf dem Dateiserver drastisch reduziert würde. Dies sollte wiederum die Benutzererfahrung verbessern. Glaubst du wirklich, dass ich mit dieser Idee noch weit weg bin?