Anscheinend haben Sie eine im Wesentlichen gültige, kurzfristige technische Entscheidung für den Datenspeicher für Ihre Anwendung getroffen. Sie haben sich entschieden, ein benutzerdefiniertes Datenspeicherverwaltungstool zu schreiben.
Sie sitzen auf einem Kontinuum und haben die Möglichkeit, sich in beide Richtungen zu bewegen.
Langfristig werden Sie wahrscheinlich (aber mit Sicherheit nicht zu 100%) in Schwierigkeiten geraten und es ist möglicherweise besser, auf die Verwendung vorhandener Datenspeicherlösungen umzusteigen. Es gibt bestimmte, sehr häufige, vorhersehbare Leistungsprobleme, mit denen Sie sich auseinandersetzen müssen, und Sie sind besser dran, vorhandene Tools zu verwenden, als Ihre eigenen zu verwenden.
Es hört sich so an, als hätten Sie eine (kleine) benutzerdefinierte Datenbank geschrieben, die in Ihre Anwendung integriert ist und von dieser direkt verwendet wird. Ich gehe davon aus, dass Sie sich auf ein Betriebssystem und ein Dateisystem verlassen, um das tatsächliche Schreiben und Lesen von Datenträgern zu verwalten und die Kombination als Datenspeicher zu behandeln.
Wann tun, was du getan hast?
Sie sitzen an einem Sweet-Spot für die Datenspeicherung. Ein Datenspeicher für Betriebssysteme und Dateisysteme ist unglaublich praktisch, zugänglich und plattformübergreifend portierbar. Die Kombination gibt es schon so lange, dass Sie sicher sind, dass Ihre Anwendung in nahezu jeder Standardbereitstellungskonfiguration unterstützt und ausgeführt wird.
Es ist auch eine einfache Kombination, für die Code geschrieben werden kann - die API ist recht einfach und grundlegend, und es sind relativ wenige Codezeilen erforderlich, um sie zum Laufen zu bringen.
Im Allgemeinen ist es ideal, das zu tun, was Sie getan haben, wenn:
- Prototyping neuer Ideen
- Erstellen von Anwendungen, bei denen eine Skalierung in Bezug auf die Leistung höchstwahrscheinlich nicht erforderlich ist
- Eingeschränkt durch ungewöhnliche Umstände wie fehlende Ressourcen für die Installation einer Datenbank
Alternativen
Sie befinden sich auf einem Kontinuum von Optionen und es gibt zwei Richtungen, in die Sie von hier aus gehen können, die ich als "unten" und "oben" betrachte:
Nieder
Dies ist die am wenigsten wahrscheinliche Option, aber der Vollständigkeit halber hier:
Sie können, wenn Sie wollen, gehen nach unten , das heißt, umgeht das Betriebssystem und Dateisystem insgesamt und wirklich schreiben und direkt von der Festplatte gelesen werden . Diese Auswahl ist normalerweise nur in Fällen relevant, in denen extreme Effizienz erforderlich ist - denken Sie beispielsweise an ein minimales / winziges MP3- Player-Gerät ohne genügend RAM für ein voll funktionsfähiges Betriebssystem oder an etwas wie die Wayback-Maschine , das eine unglaublich effiziente Masse erfordert Datenschreibvorgänge (die meisten Datenspeicher tauschen langsamere Schreibvorgänge gegen schnellere Lesevorgänge aus, da dies der am weitesten verbreitete Anwendungsfall für fast alle Anwendungen ist).
Nach oben
Hier gibt es mehrere Unterkategorien - diese sind jedoch nicht gerade exklusiv. Einige Tools umfassen beide Funktionen, einige können vollständig von einem Modus zum anderen wechseln, und einige können übereinander gelegt werden, wodurch verschiedene Funktionen für verschiedene Teile Ihrer Anwendung bereitgestellt werden.
Leistungsstärkere Datenspeicher
Möglicherweise müssen Sie immer größere Datenmengen speichern und müssen sich dennoch auf Ihre eigene Anwendung verlassen, um die Komplexität der Datenmanipulation zu bewältigen. Ihnen steht eine ganze Reihe von Schlüsselwertspeichern zur Verfügung, die in unterschiedlichem Umfang verwandte Funktionen unterstützen. NoSQL- Tools fallen ebenso wie andere in diese Kategorie.
Dies ist der naheliegende Skalierungspfad, wenn im Folgenden Ihre Anwendung beschrieben wird:
- Es ist ungewöhnlich stark leseabhängig
- Es ist in Ordnung, höhere Leistung gegen niedrigere (kurzfristige) Konsistenzgarantien auszutauschen (viele bieten "letztendlich Konsistenz" an).
- Verwaltet "direkt" den größten Teil der Datenmanipulation und mangelnde Konsistenz (in der Praxis werden Sie wahrscheinlich zuerst ein Drittanbieter-Tool verwenden, obwohl Sie dies schließlich in Ihre Anwendung oder in eine benutzerdefinierte geschriebene Zwischenschicht bringen werden) .
- Sie möchten die Datenmenge, die Sie speichern, und / oder die Fähigkeit, sie zu durchsuchen, mit "relativ einfachen" Datenmanipulationsanforderungen massiv skalieren.
Hier gibt es etwas Spielraum - Sie können eine bessere Lesekonsistenz für langsamere Lesevorgänge erzwingen. Verschiedene Tools und Optionen bieten Datenmanipulations-APIs, Indizierungs- und andere Optionen, die mehr oder weniger zum einfachen Schreiben Ihrer spezifischen Anwendung geeignet sind. Wenn die obigen Punkte Ihre Anwendung also fast vollständig beschreiben, sind Sie möglicherweise "nah genug", um mit einer leistungsstärkeren Datenspeicherlösung zu arbeiten.
Bekannte Beispiele: CouchDB , MongoDB , Redis , Cloud-Speicherlösungen wie Microsoft Azure , Google App Data Store und Amazon ECE.
Komplexere Datenmanipulations-Engines
Die "SQL" -Familie von Datenspeicheranwendungen sowie eine Reihe anderer Anwendungen werden besser als Datenmanipulations-Tools beschrieben als reine Speicher-Engines. Sie bieten eine breite Palette zusätzlicher Funktionen, die über die Speicherung von Daten hinausgehen und häufig über das hinausgehen, was im Geschäft mit Schlüsselwerten verfügbar ist. Sie möchten diesen Weg einschlagen, wenn:
- Sie müssen unbedingt über Lesekonsistenz verfügen, auch wenn dies bedeutet, dass Sie einen Leistungseinbruch erleiden.
- Sie möchten hochkomplexe Datenmanipulationen effizient durchführen - denken Sie an sehr komplexe JOIN- und UPDATE-Operationen, Datenwürfel und -schnitte usw.
- Es ist in Ordnung, die Rigidität für die Leistung abzuwägen (denken Sie an erzwungene, feste Datenspeicherformate wie Tabellen, die nicht einfach und / oder effizient geändert werden können).
- Sie haben die Ressourcen, um mit häufig komplexeren Tools und Schnittstellen umzugehen.
Dies ist die "traditionellere" Denkweise für eine Datenbank oder einen Datenspeicher, die es schon viel länger gibt. Es gibt also eine Menge , die hier verfügbar ist, und es ist häufig eine Menge Komplexität zu bewältigen. Es ist möglich, obwohl es einige Fachkenntnisse und Kenntnisse erfordert und einfache Lösungen schafft / einen Großteil der Komplexität vermeidet - Sie werden jedoch höchstwahrscheinlich Tools und Bibliotheken von Drittanbietern verwenden, um das meiste davon für Sie zu verwalten.
Bekannte Beispiele sind MySQL , SQL Server , Oracle's Database und DB2 .
Die Arbeit auslagern
Es gibt verschiedene moderne Tools und Bibliotheken von Drittanbietern, die sich zwischen Ihren Datenspeichertools und Ihrer Anwendung befinden, um Sie bei der Verwaltung der Komplexität zu unterstützen.
Sie versuchen, den größten Teil oder die gesamte Arbeit, die für die Verwaltung und Bearbeitung von Datenspeichern erforderlich ist, anfangs wegzunehmen. Im Idealfall können Sie den Übergang zur Komplexität nur dann reibungslos vollziehen, wenn dies erforderlich ist. Dies ist ein aktiver Bereich des Unternehmertums und der Forschung, mit einigen aktuellen Ergebnissen, die sofort zugänglich und verwertbar sind.
Bekannte Beispiele sind MVC- Tools ( Django , Yii ), Ruby on Rails und Datomic . Es ist schwierig, hier fair zu sein, da es buchstäblich Dutzende von Tools und Bibliotheken gibt, die als Wrapper um die APIs verschiedener Datenspeicher fungieren.
PS: Wenn Sie Videos dem Text vorziehen, möchten Sie vielleicht einige von Rich Hickeys datenbankbezogenen Videos ansehen. Er macht einen guten Job darin, den größten Teil der Überlegungen zu klären, die bei der Auswahl, Gestaltung und Verwendung eines Datenspeichers anfallen.