J'ai besoin d'apprendre comment fonctionnent les bases de données afin de les utiliser plus efficacement, et ma façon d'apprendre est de faire.
Je veux créer mon propre système de base de données. Je ne parle pas de créer une pseudo-base de données qui utiliserait une requête pour analyser des fichiers; ce serait simplement une interface de système de fichiers avec un langage de requête. Je parle de la structure réelle d'un moteur de base de données. Et puisque ce que je pense n'est ni relationnel ni orienté document (c'est "orienté nœud", si cela existe), j'aurais besoin de n'importe quelle ressource pour être aussi abstraite et de haut niveau que possible.
Alors, comment pourrais-je créer cela? Quelles ressources/tutoriels/livres puis-je lire pour comprendre?
La langue n'a pas la moindre importance. Idéalement, le code serait un pseudo-code pour illustrer le concept, non lié à une langue particulière, mais n'importe quoi ferait l'affaire. Je n'ai pas pu trouver quoi que ce soit à ce sujet sur google (puisque je suis tellement analphabète sur le sujet, peut-être que je n'entre simplement pas dans la bonne recherche).
Si de telles ressources ne sont pas disponibles, je suppose que quelque chose sur la façon de créer un client serait au moins un pas dans la bonne direction.
(c'est "orienté nœud", si ça existe)
Commencer ici. Lorsque vous traitez une application complexe comme une base de données (même une simple base de données est une application complexe), vous devez être familier avec l'historique du domaine et la terminologie appropriée et avoir au moins une idée de très haut niveau de l'architecture. Vous pouvez commencer à partir de l'article Wikipedia sur Base de données . J'ai passé quelques jours à lire tous les articles sur les concepts associés et les différents types de bases de données.
Et puisque ce que je pense n'est ni relationnel ni orienté document
Ensuite, vous choisissez Relational ou NoSQl. Si vous choisissez NoSQL, vous devez choisir un type de NoSQL. C'est extrêmement important, vous ne trouverez aucun document architectural qui traite de toutes les différentes familles de bases de données. Peu importe celui que vous choisissez, choisissez-en un et respectez-le.
La langue n'a pas la moindre importance.
Oui (malheureusement), car après avoir choisi une famille de bases de données, vous devriez commencer à explorer le code des bases de données open source de cette famille. Il existe quelques directives génériques sur ce qu'il faut rechercher:
Quelques exemples qui correspondent:
Obtenez la source, compilez-la et jouez avec. Vous n'avez pas à soumettre de correctifs ou quoi que ce soit de fantaisiste, explorez simplement le code et apportez de petites modifications ici et là pour voir ce qui se passe. C'est un processus incrémentiel, plus vous jouez avec, plus il sera facile de comprendre ce que fait le code. Si le premier projet que vous avez choisi semble extrêmement difficile à comprendre, passez simplement au suivant.
Une autre excellente option serait de se concentrer sur la construction d'un moteur pour MySQL, comme @ N.B. suggère dans un réponse précédente .
Si vous atteignez un point où vous êtes capable de faire quelque chose d'utile avec la base de code, impliquez-vous dans la communauté du projet, c'est le moyen le plus simple de trouver des ressources plus détaillées sur les concepts impliqués.
Et enfin, commencez à travailler sur votre base de données. Au début, vous pouvez simplement rédiger un clone extrêmement réduit du code que vous avez exploré. Il n'est pas nécessaire que ce soit original, pas mal de grands projets ont commencé comme des clones ou des fourches.
Quelles ressources/tutoriels/livres puis-je lire pour comprendre?
Il y a pas mal de livres:
Et quelques centaines d'autres, ainsi qu'une myriade d'articles universitaires que vous pourriez facilement retrouver via Google. Vous devez d'abord définir ce que vous voulez faire, puis rechercher un livre. S'impliquer avec une communauté d'auteurs de base de données vous aidera également à affiner la liste des livres et peut-être à obtenir de bien meilleures suggestions que ci-dessus.
Bonne chance! J'attends un commentaire avec un lien vers votre référentiel lorsque vous aurez terminé. Et si vous n'avez jamais fini, assurez-vous de laisser un commentaire me rappelant que je n'ai toujours pas fini ce compilateur que j'ai commencé à écrire en 2001.
Vous devez simplement le faire et arrêter de trop penser. Apprécier le processus d'apprentissage et l'enthousiasme sont des cadeaux.
Demander aux autres si c'est une bonne idée n'est certainement pas une bonne stratégie . Si j'avais écouté toutes les grenouilles, je travaillerais toujours chez Ikea aujourd'hui en poussant le caddie du parking au dépôt.
Vous n'avez pas à vous justifier comme Ayende l'a fait dans ce article intéressant . La question était:
Cependant, en tant que développeur pragmatique, je me demande quelle nouvelle offre ce projet dans un marché saturé où vous avez des alternatives assez matures comme CouchDB, MongoDB, Tokyo, Redis, et bien d'autres? Beaucoup de ces produits sont également multiplates-formes et fonctionnent à la vitesse C avec un record prouvé, étant utilisés dans de très grands sites Web où leurs capacités de partage et leur tolérance aux pannes ont été poussées loin.
Si vous prenez plaisir à ce processus, ne vous inquiétez pas de l'objectif, vous avez déjà gagné.
"(c'est" orienté nœud ", si cela existe)". - C'est peut-être pour ça que vous ne trouvez pas grand chose!
Plongez avec la version 0.1 et voyez où vous obtenez. Vous pouvez en apprendre davantage en essayant de produire ce que vous voulez en vous demandant ce que vous "devriez" faire. Donnez-lui quelques jours, puis vérifiez où vous en êtes.
Il y a environ 18 ans, j'ai écrit un système de base de données (pour le plaisir, allez comprendre) avec les index btree et j'ai énormément appris.
MySQL a une structure de moteur de stockage enfichable, ce pourrait être une idée de vérifier comment les moteurs sont créés pour fonctionner avec MySQL.
Cela ressemble à un grand projet. Apparemment, votre objectif n'est pas de créer un logiciel de production, mais d'en apprendre davantage sur les bases de données et le processus de création d'un système de base de données.
Je ne pense pas vraiment que vous ayez besoin de faire beaucoup de recherches. Il semble que le but est d'obtenir l'expérience de ce qui se passe dans la création d'un système de base de données basé sur des nœuds.
Voici comment commencer:
Une fois que vous aurez maîtrisé les bases, vous aurez beaucoup plus d'informations sur ce qui est difficile ou problématique. Ensuite, vous pouvez faire des recherches à ce sujet, trouver des améliorations et les intégrer.
Écrire votre propre base de données "afin de comprendre comment tout cela fonctionne" est la seule bonne raison de le faire (car les bases de données sont folles, difficiles à obtenir correctement et difficiles à prouver). Vous êtes fou, mais dans le bon sens!
Afin de voir comment cela se fait, je suggère de regarder SQLite. source SQLite est seulement d'environ 1,3 Mo compressé, et c'est une base de données transactionnelle entièrement compatible ACID. C'est aussi domaine public et l'auteur principal est un gars sympa qui, j'en suis sûr, sera heureux de répondre à vos questions. (Je pense que les bits les plus délicats se trouvent dans la façon de vraiment valider les informations sur le disque; persuader les systèmes d'exploitation et le matériel d'arrêter de mentir et d'écrire vraiment la transaction [~ # ~] maintenant [~ # ~] est étonnamment difficile et pourquoi je suis si content de ne jamais avoir à écrire de BD.)
Achète un livre:
Les index sont à l'heure actuelle l'aspect le plus important des bases de données. Étudiez les alternatives qui existent comme les arbres binaires.
Lisez également à propos de produit cartésien qui est un moyen de calculer la complexité des jointures.
J'ai besoin d'apprendre comment fonctionnent les bases de données
Apprenez l'algèbre relationnelle.
Trouvez un petit moteur DB, apprenez la source.
afin de les utiliser plus efficacement
Nan. Vous devez apprendre à utiliser efficacement une base de données. Vous pourriez être un meilleur conducteur si vous comprenez comment fonctionne votre voiture, mais vous serez un bien meilleur conducteur si vous vous concentrez vraiment sur la conduite.
Suivez les itinéraires traditionnels: suivez un cours, lisez un livre, passez en revue des pairs, posez des questions, tilisez l'index luke .