Preciso aprender como os bancos de dados funcionam para usá-los com mais eficiência, e minha maneira de aprender é fazê-lo.
Eu quero criar meu próprio sistema de banco de dados. Não estou me referindo à criação de um pseudo-banco de dados que usaria a consulta para analisar arquivos; isso seria simplesmente uma interface do sistema de arquivos com uma linguagem de consulta. Eu estou falando sobre a estrutura real de um mecanismo de banco de dados. E como o que tenho em mente não é relacional nem orientado a documentos (é "orientado a nós", se é que isso existe)), eu precisaria de qualquer recurso para ser o mais abstrato e de alto nível possível.
Então, como eu iria criar isso? Quais recursos / tutoriais / livros posso ler para entender?
O idioma não importa nem um pouco. Idealmente, o código seria um pseudocódigo para ilustrar o conceito, não vinculado a um idioma específico, mas qualquer coisa faria. Não consegui encontrar nada sobre o assunto no google (já que sou tão analfabeta no assunto, talvez não esteja apenas inserindo a pesquisa correta).
Se esses recursos não estiverem disponíveis, acho que algo sobre como criar um cliente seria pelo menos um passo na direção certa.
fonte
I studied open-source DBs, but their codebase is too huge
: Se algo como redis ou flockdb for muito grande para você ler, não vejo como você lida com a escrita ou com o próprio banco de dados.Respostas:
Começa aqui. Ao lidar com um aplicativo complexo como um banco de dados (mesmo um banco de dados simples é um aplicativo complexo), você deve estar familiarizado com o histórico do domínio e com a terminologia apropriada e ter pelo menos uma idéia de nível muito alto da arquitetura. Você pode começar do artigo da Wikipedia sobre banco de dados . Passei alguns dias lendo todos os artigos sobre os conceitos relacionados e os diferentes tipos de banco de dados.
Em seguida, você escolhe Relational ou NoSQl. Se você escolher o NoSQL, deverá escolher um tipo de NoSQL. Isso é extremamente importante, você não encontrará nenhum documento arquitetural que discuta todas as diferentes famílias de bancos de dados. Realmente não importa qual você escolher, basta escolher um e ficar com ele.
Sim (infelizmente), porque depois de escolher uma família de bancos de dados, você deve começar a explorar o código nos bancos de dados de código aberto dessa família. Existem algumas diretrizes genéricas sobre o que procurar:
Alguns exemplos que se encaixam:
Obtenha a fonte, compile-a e brinque com ela. Você não precisa enviar patches ou qualquer coisa que deseje, basta explorar o código e fazer pequenas alterações aqui e ali para ver o que acontece. É um processo incremental, quanto mais você brinca com ele, mais fácil será entender o que o código faz. Se o primeiro projeto escolhido parecer extremamente difícil de entender, passe para o próximo.
Outra ótima opção seria se concentrar na construção de um mecanismo para o MySQL, como o @NB sugere em uma resposta anterior .
Se você chegar a um ponto em que é capaz de fazer algo útil com a base de código, envolva-se na comunidade do projeto, essa é a maneira mais fácil de encontrar recursos mais detalhados sobre os conceitos envolvidos.
E, finalmente, comece a trabalhar no seu banco de dados. No começo, você pode escrever um clone extremamente reduzido do código que está explorando. Não precisa ser original, alguns ótimos projetos começaram como clones ou garfos.
Existem alguns livros:
E algumas outras centenas, além de uma infinidade de trabalhos acadêmicos que você pode rastrear facilmente via Google. Você precisa definir o que deseja fazer primeiro e depois procurar um livro. O envolvimento com uma comunidade de colegas autores de bancos de dados também ajudará você a restringir a lista de livros e, talvez, a obter sugestões muito melhores do que as anteriores.
Boa sorte! Estou esperando um comentário com um link para o seu repositório quando terminar. E se você nunca terminar, não deixe de comentar que ainda não terminei o compilador que comecei a escrever em 2001.
fonte
I'm expecting a comment with a link to your repository when you're done
: definitivamente! Mais uma vez obrigado a você e a todos os outros, isso foi realmente edificante.Você deveria fazê-lo e parar de pensar demais. Apreciar o processo de aprendizagem e entusiasmo são presentes.
Perguntar aos outros se é uma boa ideia certamente não é uma boa estratégia . Se eu tivesse ouvido todos os sapos, ainda trabalharia na Ikea hoje empurrando o carrinho de compras do estacionamento para o depósito.
Você não precisa se justificar como Ayende fez nesse post interessante . A questão era:
Se você gosta do processo, não se preocupe com o objetivo, você já venceu.
fonte
"(é" orientado a nós ", se isso existir)". - Pode ser por isso que você não está encontrando muito!
Mergulhe na versão 0.1 e veja onde você chega. Você pode aprender mais tentando produzir o que deseja e perguntando o que "deve" fazer. Reserve alguns dias e depois revise onde você está.
Há cerca de 18 anos, escrevi um sistema básico de banco de dados (por diversão, entendi) com índices btree e aprendi bastante.
fonte
O MySQL possui uma estrutura de mecanismo de armazenamento conectável; pode ser uma idéia verificar como os mecanismos são criados para funcionar no MySQL.
fonte
Parece um ótimo projeto. Aparentemente, seu objetivo não é criar um software de produção, mas aprender sobre bancos de dados e o processo de criação de um sistema de banco de dados.
Eu realmente não acho que você precise fazer muita pesquisa. Parece que o objetivo é obter a experiência do que é necessário para criar um sistema de banco de dados baseado em nó.
Aqui está como eu começaria:
Depois de começar o básico, você terá muito mais informações sobre o que é difícil ou problemático. Então você pode fazer alguma pesquisa sobre isso, encontrar algumas melhorias e integrá-las.
fonte
Escrever seu próprio banco de dados “para entender como tudo funciona” é a única boa razão para fazê-lo (já que os bancos de dados são muito difíceis de acertar e difíceis de provar). Você é louco, mas de um jeito bom!
Para ver como é feito, sugiro olhar para SQLite. A fonte SQLite é compactada em apenas 1,3 MB e é um banco de dados transacional totalmente compatível com ACID. Também é de domínio público e o autor principal é um cara legal que, com certeza, ficará feliz em responder às suas perguntas. (Acho que as partes mais complicadas são como comprometer verdadeiramente as informações no disco; convencer os sistemas operacionais e o hardware a parar de mentir e realmente escrever a transação. AGORA é surpreendentemente difícil e por que estou tão feliz por nunca ter que escrever um banco de dados.)
fonte
Compre um livro:
http://www.springer.com/computer/database+management+%26+information+retrieval/book/978-1-84628-394-9
Os índices são o aspecto mais importante dos bancos de dados hoje. Estude as alternativas que existem como árvores binárias.
Leia também sobre o produto cartesiano, que é uma maneira de calcular a complexidade das junções.
fonte
Aprenda álgebra relacional.
Encontre um pequeno mecanismo de banco de dados, aprenda a fonte.
Não. Você precisa aprender como usar com eficiência um banco de dados. Você pode ser um motorista melhor se entender como o carro funciona, mas será um motorista muito melhor se realmente se concentrar em dirigir.
Siga as rotas tradicionais: faça um curso, leia um livro, faça uma revisão por pares, faça perguntas, use o índice luke .
fonte
Learn relational algebra.
Assumindo op está interessado em bancos de dados relacionais, é claro ...