J'ai pris un cours de niveau supérieure qui n'est qu'un grand projet - écrire un SGBD. P>
L'objectif n'est pas de réinventer la roue et de faire un SGBD d'entreprise à Rival Oracle. Seul un petit sous-ensemble de commandes SQL doit être pris en charge. L'objectif n'est pas non plus de créer des MDB de modèle hybride fantaisie pour stocker du multimédia ou quelque chose. Ce doit être un SGDBR traditionnel. P>
L'objectif principal du projet est d'utiliser des techniques de programmation pour tirer parti des architectures modernes (processeurs multicœurs) pour créer une base de données haute performante (vitesse, charge). p>
Je me demandais simplement s'il y avait des ressources sur les évaluations de requêtes, les optimiseurs, les structures de données idéales pour les DBMSES ou essentiellement tout ce qui pourrait m'aider à créer un projet de protection. Le professeur jetait des termes tels que les métaprogramming par exemple. P>
Le projet doit être effectué entièrement en C ++. P>
Merci pour les réponses jusqu'à présent! Je ne peux pas optimiser un SGBD existant comme MySQL que le projet nécessite de construire votre propre SGBD à partir de zéro. Oui, je sais que c'est à peu près réinventer la roue pour la majeure partie de la pièce, mais il existe une portée de certains nouveaux algorithmes d'évaluation de la requête et d'optimisation. Si vous connaissez de bonnes ressources ou des livres avec cette zone spécifique, alors dites-moi! p>
4 Réponses :
Sauf pour les problèmes de propriété, que diriez-vous d'optimiser MySQL de telles manières? Ce n'est pas une tâche triviale cependant. Optimisation de la requête qui tire parti du traitement parallèle peut être un travail complet. P>
Il vaut mieux se tenir sur les épaules des géants pour atteindre la hausse que de se tenir à côté d'eux. P>
+1 - MYSQL.COM Aucun point ne réinventant la roue. Si l'objectif est de «optimiser», il est préférable d'avoir quelque chose qui fonctionne, puis vous refactez des zones spécifiques. Vous pouvez probablement aussi déterrer un test unitaire ou deux (sans familier avec le code de MySQL lui-même) qui vous aidera à valider à mesure que vous allez.
@Anurag: En fait, je n'ai aucune idée. Intéressant: Googling pour la phrase montre déjà cette page!
Google rampe des sites Web populaires toutes les 6-10 minutes environ. Juste brillant!
@Anurag: Newton a déclaré quelque chose à l'effet de "si j'ai vu plus loin que d'autres, c'est parce que je suis resté sur les épaules des géants".
Étant donné qu'il s'agit d'un projet universitaire, il aurait besoin d'organiser avec l'université de compter en tant que crédit. Ce serait également, par nécessité, le forcerait à se spécialiser sur un aspect plus approfondi de la conception, plutôt que de traiter la photo holistique, car les éléments de base auront déjà été mis en œuvre dans MySQL (le forçant à adresser un sujet plus avancé. ).
Tout d'abord, vous devez en savoir plus sur le calcul relationnel et faire un compilateur à gérer de la fabrication de SQL, heureusement SQL est une langue facile et ce n'est pas mauvais. P>
Soyez familière avec BX-Trees pour vos index. Ensuite, faites un espace de commit et de restauration et c'est à peu près tout ce qu'il y est. Ce n'est pas la science de la fusée, comparée à d'autres projets que vous pourriez entreprendre, mais c'est certainement quelque chose que vous feriez mieux de commencer si vous voulez un bon résultat d'ici la fin du semestre / année. P>
Edit: Oh, et comme pour l'architecture moderne se passe, les arbres ne bénéficient généralement pas beaucoup de multithreading. Ni le disque ne se lit pas non plus. D'autre part, il est crucial pour les performances élevées d'utiliser l'ensemble de votre mémoire à l'aide des appels au niveau du système d'exploitation, pas seulement la mémoire normalement adressable dans un processus. p>
Au fur et à mesure que vous souhaitez profiter des architectures modernes de la CPU, cela pourrait être intéressant de regarder le projet MONETDB. Le projet a produit de nombreuses recherches autour d'optimiser les bases de données pour l'architecture moderne du processeur, à l'aide de magasins de colonnes et de stocker des pages compressées en mémoire - ne les décompressez que dans le cache CPU pour obtenir des vitesses importantes pour de très grandes bases de données. P>
Cette approche (stockage orienté colonne + compression) et un moteur de requête plus traditionnel, peut-être basé sur le moteur SQLite, devrait être une bonne base pour un projet. P>
Cherchait ce genre de réponses, merci pour la tête sur monetdb :)
Puisque votre professeur a mentionné métaprogramming, vous voudrez peut-être examiner les éléments suivants: P>
wam - warren abstrait machine. Cela compile le code Prolog dans un ensemble d'instructions pouvant être exécutées sur une machine abstraite. L'idée est similaire à JVM et CLI. Vous n'avez pas besoin d'aller dans cela en détail, il suffit de comprendre l'idée d'une machine abstraite. P> li>
jvm, cli - idem comme ci-dessus. p> li>
outils tels que lex, yacc, flex, bison. Puisque vous écrirez essentiellement un interpréteur / compilateur pour les commandes SQL, vous souhaitez probablement utiliser certains outils. Cela peut être considéré comme une forme de métaprogramming, car vous utilisez une langue pour écrire un outil - vous programmez donc à la méta-niveau. P> li>
Encore une fois, l'idée de méta-programmation - peut-être que vous pouvez augmenter votre langue avec des constructions qui permettront à votre compilateur / interprète SQL d'optimiser automatiquement les requêtes parallèles. Ceux-ci peuvent être mis en œuvre comme des allusions, etc. au compilateur. P> li>
Recompilers - Vous voudrez peut-être écrire un interpréteur / compilateur qui recompille les requêtes initiales en celles qui peuvent exécuter en parallèle pour votre architecture cible. Par exemple, pour une architecture N-Core, il peut recompiler une requête dans les sous-soluelles qui s'exécutent en parallèle, puis combinent les résultats. P> Li> ol>
Je ne suis pas sûr que vous soyez dans une grande recherche sur les pratiques d'optimisation standard. Ceux-ci peuvent être complexes et le sujet d'une vie de recherche en eux-mêmes. Depuis que l'objet de l'exercice est de tirer parti du traitement parallèle et de la méta-programmation, qui devrait être au centre de vos recherches. P>
Bonjour, merci pour l'information. Je cherchais quelque chose comme ça, maintenant je peux procéder de ces heads. :)
comme si un oracle comme le DBMS pouvait être un projet de classe :)
Dupe of Stackoverflow.com/questions/1852042/developing-my-nown- RDBMS
@Anurag peut-être après que le projet a été évalué, il peut le construire à Rival Oracle. Mais ce n'est pas son motif.