Crie meu próprio sistema de banco de dados [fechado]

61

Preciso aprender como os bancos de dados funcionam para usá-los com mais eficiência, e minha maneira de aprender é fazendo.

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 de 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 é nem 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 poderia criar isso? Quais recursos / tutoriais / livros posso ler para entender?

A linguagem não importa nem um pouco. Idealmente, o código seria pseudo-código para ilustrar o conceito, não vinculado a um idioma específico, mas qualquer coisa serviria. Eu não consegui encontrar nada sobre o assunto no google (já que sou tão analfabeta no assunto, talvez eu simplesmente não esteja entrando na busca certa).

Se tais recursos não estiverem disponíveis, então eu acho que algo sobre como criar um cliente seria, pelo menos, um passo na direção certa.

    
por Xananax 25.11.2011 / 07:15
fonte

8 respostas

56

(it's "node-oriented", if that even exists)

Comece aqui. Ao lidar com um aplicativo complexo como um banco de dados (até mesmo um banco de dados simples é um aplicativo complexo), você deve estar familiarizado com o histórico do domínio e com a terminologia correta e ter pelo menos uma ideia de alto nível da arquitetura. Você poderia começar a partir do artigo da Wikipedia sobre o banco de dados . Passamos alguns dias lendo todos os artigos sobre os conceitos relacionados e os diferentes tipos de banco de dados.

And since what I have in mind is neither relational nor document-oriented

Em seguida, você escolhe Relacional ou NoSQl. Se você escolher NoSQL, você deve escolher um tipo de NoSQL. Isso é extremamente importante, você não encontrará documentos arquitetônicos que discutam todas as famílias de bancos de dados diferentes. Realmente não importa qual você escolher, basta escolher um e ficar com ele.

The language does not matter in the slightest.

Sim (infelizmente), porque depois de escolher uma família de banco de dados, você deve começar a explorar o código de bancos de dados de código aberto dessa família. Existem algumas orientações genéricas sobre o que procurar:

  • Codebase relativamente pequena,
  • Documentos arquitetônicos ou pelo menos um blog de desenvolvimento,
  • O banco de dados que você escolhe deve estar próximo do que é considerado genérico na família, seria mais difícil aprender com ele se fosse altamente especializado.

Alguns exemplos que se encaixam:

Pegue a fonte, compile e brinque com ela. Você não precisa enviar patches ou algo assim, apenas explore o código e faça pequenas alterações aqui e ali para ver o que acontece. É um processo incremental, quanto mais você brincar com ele, mais fácil será entender o que o código faz. Se o primeiro projeto que você escolheu parece extremamente difícil de entender, basta seguir para o próximo.

Outra ótima opção seria se concentrar na criação de um mecanismo para o MySQL, como @ N.B. sugere em uma resposta anterior .

Se você chegar a um ponto em que é possível 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ê poderia simplesmente escrever um clone do código que você está explorando. Não tem que ser original, alguns grandes projetos começaram como clones ou garfos.

What resources/tutorials/books can I read to understand?

Existem alguns livros:

E algumas centenas de outras, além de uma infinidade de trabalhos acadêmicos que você pode rastrear facilmente pelo Google. Você precisa definir o que deseja fazer primeiro e depois procurar um livro. Envolver-se com uma comunidade de autores de bancos de dados também ajudará você a restringir a lista de livros e talvez receba sugestões muito melhores do que as citadas acima.

Boa sorte! Estou esperando um comentário com um link para o seu repositório quando terminar. E se você nunca terminar, deixe um comentário lembrando que eu ainda não terminei o compilador que comecei a escrever em 2001.

    
por 25.11.2011 / 12:47
fonte
24

Você deve fazer isso e parar de pensar demais. Apreciando o processo de aprendizagem e enthousiasm são presentes.

Perguntar aos outros se é uma boa ideia certamente não é uma boa estratégia . Se eu tivesse ouvido todos os sapos, eu ainda trabalharia no 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:

However as a pragmatic developer, I am wondering what new this project is offering in a saturated market where you have quite mature alternatives like CouchDB, MongoDB, Tokyo, Redis, and many more ? Many of these products are also cross platform and run at C speed with a proven record, being used in very big web sites where their sharding capabilities and fault tolerance have been pushed far.

Se você tiver prazer no processo, não se preocupe com o objetivo, você já ganhou.

    
por 25.11.2011 / 10:21
fonte
6

"(é" orientado a nó ", se é que existe mesmo)". - Pode ser por isso que você não está encontrando muita coisa!

Mergulhe na versão 0.1 e veja onde você chega. Você pode aprender mais tentando produzir o que você quer, perguntando o que você "deveria" fazer. Dê alguns dias e depois analise onde você chegou.

Cerca de 18 anos atrás eu escrevi um sistema básico de banco de dados (por diversão, vá em frente) com índices btree e aprendi muito.

    
por 25.11.2011 / 11:25
fonte
4

O MySQL tem uma estrutura de mecanismo de armazenamento plugável, pode ser uma boa ideia verificar como os mecanismos são criados para trabalhar no MySQL .

    
por 25.11.2011 / 10:41
fonte
4

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 vai criar um sistema de banco de dados baseado em nós.

Veja como eu começaria:

  1. Escolha seu idioma favorito ou um idioma que você deseja melhorar.
  2. Crie o objeto do nó (ou o que estiver mais próximo em seu idioma). Descubra como vinculá-los.
  3. Faça uma pequena lista de instruções SQL que você implementará primeiro.
  4. Decida como salvar os dados. Uma solução óbvia é serializar todos os nós, carregá-los quando o programa for iniciado e salvá-los quando o programa terminar.

Depois de ter o básico funcionando, 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.

    
por 26.11.2011 / 02:07
fonte
3

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 malucos para acertar, e difíceis de provar corretos). Você é louco, mas de um jeito bom!

Para ver como é feito, sugiro consultar o SQLite. A fonte de SQLite tem apenas 1.3MB de compressão 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, tenho certeza, ficará feliz em responder às suas perguntas. (Acho que os bits mais complicados vêm em como realmente comprometer informações em disco; persuadir sistemas operacionais e hardware a parar de mentir e realmente escrever a transação NOW é surpreendentemente difícil e por isso estou tão feliz por nunca ter que escreva um DB.)

    
por 25.11.2011 / 12:52
fonte
3

Compre um livro:

link

Os índices são o aspecto mais importante dos bancos de dados atualmente. Estude as alternativas que existem como árvores binárias.

Leia também sobre o produto cartesiano que é uma maneira de calcular como as junções complexas serão.

    
por 25.11.2011 / 13:16
fonte
3

I need to learn how databases work

Aprenda álgebra relacional.

Encontre um pequeno mecanismo de banco de dados, aprenda a fonte.

in order to use them more efficiently

Não. Você precisa aprender como usar eficientemente um banco de dados. Você pode ser um piloto melhor se entender como seu carro funciona, mas você será um piloto muito melhor se realmente se concentrar na direção.

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 .

    
por 25.11.2011 / 16:40
fonte