meine 2 Pence wert. Ein bisschen Sehnsucht, aber ...... Ich hatte eine ähnliche Anforderung in einem meiner Inkubationsprojekte. Ähnlich wie bei Ihnen waren meine wichtigsten Anforderungen eine Dokumentendatenbank (in meinem Fall XML) mit Dokumentversionierung. Es war für ein Mehrbenutzersystem mit vielen Anwendungsfällen für die Zusammenarbeit. Ich habe es vorgezogen, verfügbare OpenSource-Lösungen zu verwenden, die die meisten wichtigen Anforderungen erfüllen.
Um es auf den Punkt zu bringen: Ich konnte kein Produkt finden, das beides auf eine Weise bereitstellte, die skalierbar genug war (Anzahl der Benutzer, Nutzungsvolumen, Speicher- und Rechenressourcen). Ich war voreingenommen gegenüber Git für alle vielversprechenden Funktionen und (wahrscheinliche) Lösungen, die man daraus herstellen könnte. Da ich mehr mit der Git-Option spielte, wurde der Wechsel von einer Einzelbenutzerperspektive zu einer Mehrfachbenutzerperspektive (Milli) zu einer offensichtlichen Herausforderung. Leider konnte ich nicht wie Sie eine umfassende Leistungsanalyse durchführen. (.. faul / früh aufhören .... für Version 2, Mantra) Power to you!. Wie auch immer, meine voreingenommene Idee hat sich seitdem zur nächsten (immer noch voreingenommenen) Alternative gewandelt: einem Netz von Werkzeugen, die in ihren getrennten Bereichen, Datenbanken und Versionskontrolle die besten sind.
Während noch gearbeitet (... und leicht vernachlässigt), ist die verwandelte Version einfach dies.
- im Frontend: (Userfacing) Verwenden Sie eine Datenbank für den Speicher der ersten Ebene (Schnittstelle zu Benutzeranwendungen).
- Verwenden Sie im Backend ein Versionskontrollsystem (VCS) (wie git), um die Versionierung der Datenobjekte in der Datenbank durchzuführen
Im Wesentlichen würde es bedeuten, der Datenbank ein Versionskontroll-Plugin mit etwas Integrationskleber hinzuzufügen, den Sie möglicherweise entwickeln müssen, der jedoch viel einfacher sein kann.
Es würde (soll) funktionieren, dass der primäre Datenaustausch über mehrere Benutzeroberflächen über die Datenbank erfolgt. Das DBMS behandelt alle unterhaltsamen und komplexen Probleme wie Mehrbenutzer-, Parallelitäts-, Atomoperationen usw. Im Backend führt das VCS eine Versionskontrolle für einen einzelnen Satz von Datenobjekten durch (keine Parallelität oder Mehrbenutzerprobleme). Für jede effektive Transaktion in der Datenbank wird die Versionskontrolle nur für die Datensätze durchgeführt, die sich effektiv geändert hätten.
Der Schnittstellenkleber wird in Form einer einfachen Interworking-Funktion zwischen der Datenbank und dem VCS vorliegen. In Bezug auf das Design wäre ein einfacher Ansatz eine ereignisgesteuerte Schnittstelle, bei der Datenaktualisierungen aus der Datenbank die Versionskontrollprozeduren auslösen (Hinweis: Annahme von MySQL, Verwendung von Triggern und sys_exec () bla bla ...). In Bezug auf die Komplexität der Implementierung reicht es von einfach und effektiv (z. B. Skripterstellung) bis komplex und wunderbar (einige programmierte Connector-Schnittstellen). Alles hängt davon ab, wie verrückt Sie damit umgehen wollen und wie viel Schweißkapital Sie bereit sind, auszugeben. Ich denke, einfaches Scripting sollte die Magie bewirken. Um auf das Endergebnis, die verschiedenen Datenversionen, zuzugreifen, besteht eine einfache Alternative darin, einen Klon der Datenbank (eher einen Klon der Datenbankstruktur) mit den Daten zu füllen, auf die das Versions-Tag / id / hash im VCS verweist. Auch dieses Bit ist ein einfacher Abfrage- / Übersetzungs- / Zuordnungsjob einer Schnittstelle.
Es sind noch einige Herausforderungen und Unbekannte zu bewältigen, aber ich nehme an, dass die Auswirkungen und die Relevanz der meisten davon weitgehend von Ihren Anwendungsanforderungen und Anwendungsfällen abhängen. Einige sind möglicherweise keine Probleme. Einige der Probleme umfassen die Leistungsanpassung zwischen den beiden Schlüsselmodulen, der Datenbank und dem VCS, für eine Anwendung mit hochfrequenten Datenaktualisierungsaktivitäten, die Skalierung von Ressourcen (Speicher- und Verarbeitungsleistung) über die Zeit auf der Git-Seite als Daten und Benutzer wachsen: stetig, exponentiell oder schließlich Plateaus
Von dem Cocktail oben ist hier, was ich gerade braue
- Verwenden von Git für das VCS (ursprünglich als gutes altes CVS für die Verwendung von nur Änderungssätzen oder Deltas zwischen 2 Versionen angesehen)
- Verwenden von MySQL (aufgrund der stark strukturierten Natur meiner Daten, XML mit strengen XML-Schemata)
- mit MongoDB herumspielen (um eine NoSQl-Datenbank auszuprobieren, die eng mit der in git verwendeten nativen Datenbankstruktur übereinstimmt)
Einige lustige Fakten - git macht tatsächlich klare Dinge, um die Speicherung zu optimieren, wie z. B. die Komprimierung und die Speicherung von nur Deltas zwischen der Revision von Objekten - JA, git speichert nur Änderungssätze oder Deltas zwischen Revisionen von Datenobjekten, wo dies anwendbar ist (es weiß wann und wie) . Referenz: Packdateien, tief im Bauch von Git-Interna
- Die Überprüfung des Objektspeichers des Git (inhaltsadressierbares Dateisystem) zeigt auffallende Ähnlichkeiten (aus der Konzeptperspektive) mit noSQL-Datenbanken wie mongoDB. Auch hier kann es auf Kosten des Schweißkapitals interessantere Möglichkeiten für die Integration der 2 und die Leistungsoptimierung bieten
Wenn Sie so weit gekommen sind, lassen Sie mich wissen, ob das oben Gesagte auf Ihren Fall anwendbar ist und wie es zu einem Teil des Aspekts Ihrer letzten umfassenden Leistungsanalyse passen würde