On dirait que vous avez pris une décision technique de magasin de données à court terme, essentiellement valable, pour votre application: vous avez choisi d'écrire un outil de gestion de magasin de données personnalisé.
Vous êtes assis sur un continuum, avec des options pour aller dans les deux sens.
À long terme, vous rencontrerez probablement des problèmes (presque, mais pas à 100% certainement) et il sera peut-être préférable de passer à l'utilisation de solutions de stockage de données existantes. Vous devrez résoudre des problèmes de performances spécifiques, très fréquents et prévisibles, et il vaut mieux utiliser les outils existants au lieu de les résoudre vous-même.
On dirait que vous avez écrit une (petite) base de données personnalisée, intégrée et directement utilisée par votre application. Je suppose que vous utilisez un système d’exploitation et un système de fichiers pour gérer l’écriture et la lecture du disque, et vous traitez la combinaison comme un magasin de données.
Quand faire ce que tu as fait
Vous êtes assis à un endroit idéal pour le stockage des données. Un magasin de données de système d’exploitation et de système de fichiers est extrêmement pratique, accessible et portable sur plusieurs plates-formes. La combinaison existe depuis si longtemps que vous êtes certain d'être pris en charge et de faire fonctionner votre application dans presque toutes les configurations de déploiement standard.
C'est aussi une combinaison facile pour écrire du code - l' API est assez simple et basique, et il faut relativement peu de lignes de code pour le faire fonctionner.
Généralement, il est idéal de faire ce que vous avez fait quand:
- Prototyper de nouvelles idées
- Construire des applications dont il est très peu probable qu'elles aient besoin d'évoluer, en termes de performances
- Contraintes par des circonstances inhabituelles, telles que le manque de ressources pour l'installation d'une base de données
Des alternatives
Vous êtes sur un continuum d'options, et il y a deux "directions" que vous pouvez suivre, ce que je considère comme "bas" et "haut":
Vers le bas
C'est l'option la moins probable à appliquer, mais c'est par souci de complétude:
Vous pouvez, si vous le souhaitez, descendre , c'est-à-dire contourner complètement le système d'exploitation et le système de fichiers et réellement écrire et lire directement à partir du disque. Ce choix n’est généralement pertinent que dans les cas où une efficacité extrême est requise - par exemple, un lecteur MP3 minuscule / minime , ne disposant pas de suffisamment de RAM pour un système d’exploitation entièrement fonctionnel, ou de quelque chose comme la Wayback Machine , qui nécessite une masse incroyablement efficace. opérations d'écriture de données (la plupart des magasins de données compensent les écritures plus lentes pour des lectures plus rapides, car c'est le cas d'utilisation extrêmement répandu pour presque toutes les applications).
Up
Il y a plusieurs sous-catégories ici - celles-ci ne sont pas exactement exclusives, cependant. Certains outils couvrent les deux, fournissant des fonctionnalités dans chacun d’eux, certains peuvent basculer complètement d’un mode à l’autre, et certains peuvent être superposés, offrant des fonctionnalités différentes aux différentes parties de votre application.
Des magasins de données plus puissants
Vous devrez peut-être stocker des volumes de données de plus en plus importants tout en vous fiant à votre propre application pour gérer la complexité de la manipulation des données. Toute une gamme de magasins de valeurs-clés sont à votre disposition, avec différents degrés de prise en charge des fonctions associées. Les outils NoSQL entrent dans cette catégorie, ainsi que d’autres.
C’est le chemin évident à suivre lorsque les éléments suivants décrivent votre application:
- Il est inhabituellement lourd en lecture
- Vous êtes d'accord avec le compromis entre performances supérieures et garanties de cohérence inférieures (à court terme) (beaucoup offrent une "cohérence éventuelle").
- Est "directement" en train de gérer la plupart des manipulations de données et manque de cohérence (en pratique, vous finirez probablement par utiliser un outil tiers au début, mais vous finirez par l'introduire dans votre application ou dans une couche intermédiaire écrite personnalisée) .
- Vous cherchez à redimensionner massivement la quantité de données que vous stockez et / ou votre capacité à y effectuer des recherches, avec des exigences de manipulation de données "relativement simples".
Il y a une certaine marge de manœuvre ici - vous pouvez forcer une meilleure cohérence de lecture, pour des lectures plus lentes. Divers outils et options fournissent des apis pour la manipulation de données, l'indexation et d'autres options, qui peuvent être plus ou moins adaptées pour écrire facilement votre application spécifique. Ainsi, si les points ci-dessus décrivent presque complètement votre application, vous serez peut-être "suffisamment proche" pour utiliser une solution de stockage de données plus puissante.
Exemples connus: CouchDB , MongoDB , Redis , des solutions de stockage dans le cloud telles que Azure de Microsoft , Google App Data Store et Amazon ECE.
Des moteurs de manipulation de données plus complexes
La famille "SQL" d'applications de stockage de données, ainsi que de nombreuses autres, sont mieux décrites comme des outils de manipulation de données que des moteurs de stockage purs. Ils offrent un large éventail de fonctionnalités supplémentaires, allant au-delà du stockage de données et allant souvent au-delà de ce qui est disponible dans le magasin de clés-valeurs. Vous voudrez prendre ce chemin quand:
- Vous devez absolument avoir une cohérence de lecture, même si cela signifie que vous allez perdre de la performance.
- Vous cherchez à effectuer efficacement des manipulations de données très complexes - pensez aux opérations JOIN et UPDATE très complexes, aux cubes de données et au découpage en tranches, etc.
- Vous pouvez accepter une perte de rigidité en termes de performances (pensez à des formats de stockage de données fixes, forcés, tels que des tableaux, qui ne peuvent pas être modifiés facilement et / ou efficacement).
- Vous disposez des ressources nécessaires pour gérer un ensemble d'outils et d'interfaces souvent plus complexe.
C’est la manière la plus «traditionnelle» de penser une base de données ou un magasin de données, et elle existe depuis bien plus longtemps. C’est pourquoi beaucoup de choses sont disponibles ici, et il ya souvent beaucoup de complexité à gérer. Il est possible, bien que cela demande un peu d’expertise et de connaissances, et de construire des solutions simples / d’éviter une grande partie de la complexité. Vous finirez probablement par utiliser des outils et des bibliothèques tiers pour gérer la plupart de ceux-ci pour vous.
Des exemples bien connus sont MySQL , SQL Server , Oracle's Database et DB2 .
Externaliser le travail
Il existe plusieurs outils et bibliothèques tiers modernes, qui s'interposent entre vos outils de stockage de données et votre application, pour vous aider à gérer la complexité.
Ils tentent au départ d’enlever la plupart ou la totalité du travail de gestion et de manipulation des magasins de données et, idéalement, de vous permettre de passer en douceur à la complexité uniquement lorsque et si cela est nécessaire. Il s’agit d’un domaine actif d’entrepreneuriat et de recherche, avec quelques résultats récents qui sont immédiatement accessibles et utilisables.
Des exemples bien connus sont les outils MVC ( Django , Yii ), Ruby on Rails et Datomic . Il est difficile d'être juste ici, car il existe des dizaines d'outils et de bibliothèques qui encapsulent les API de divers magasins de données.
PS: si vous préférez les vidéos au texte, vous pouvez visionner certaines des vidéos de Rich Hickey relatives à la base de données; il élucide la plupart des réflexions nécessaires pour choisir, concevoir et utiliser un magasin de données.