Crea il mio sistema di database [chiuso]

61

Ho bisogno di imparare come funzionano i database per usarli in modo più efficiente e il mio modo di apprendere è farlo.

Voglio creare il mio sistema di database. Non mi riferisco alla creazione di uno pseudo-database che userebbe la query per analizzare i file; questa sarebbe semplicemente un'interfaccia per filesystem con un linguaggio di query. Sto parlando della struttura effettiva di un motore di database. E poiché quello che ho in mente non è né relazionale né orientato al documento (è "orientato al nodo", se esiste anche), avrei bisogno che qualsiasi risorsa sia il più astratta e di alto livello possibile.

Quindi, come andrei a creare questo? Quali risorse / tutorial / libri posso leggere per capire?

La lingua non ha importanza. Idealmente, il codice sarebbe uno pseudo-codice per illustrare il concetto, non legato ad un particolare linguaggio, ma qualsiasi cosa dovrebbe fare. Non sono riuscito a trovare nulla sull'argomento su google (dal momento che sono così analfabeta sull'argomento, forse non sto inserendo la ricerca giusta).

Se tali risorse non sono disponibili, suppongo che qualcosa su come creare un cliente sia almeno un passo nella giusta direzione.

    
posta Xananax 25.11.2011 - 07:15
fonte

8 risposte

56

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

Inizia qui. Quando si ha a che fare con un'applicazione complessa come un database (anche un semplice database è un'applicazione complessa), si dovrebbe avere familiarità con la storia del dominio e la terminologia appropriata e avere almeno un'idea di alto livello dell'architettura. Potresti iniziare dall'articolo di Wikipedia su Database . Passato qualche giorno a leggere tutti gli articoli sui concetti correlati e sui diversi tipi di database.

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

Successivamente, scegli Relational o NoSQl. Se scegli NoSQL, dovresti scegliere un tipo di NoSQL. È estremamente importante, non troverai documenti architettonici che discutano tutte le diverse famiglie di database. Non importa quale scegli, prendine uno e seguilo.

The language does not matter in the slightest.

Sì (purtroppo), perché dopo aver scelto una famiglia di database dovresti iniziare ad esplorare il codice dai database open source di quella famiglia. Ci sono alcune linee guida generiche su cosa cercare:

  • Codebase relativamente piccolo,
  • Documenti architettonici o almeno un blog di sviluppo
  • Il database che scegli dovrebbe essere vicino a ciò che è considerato generico nella famiglia, sarebbe più difficile da imparare se fosse altamente specializzato.

Alcuni esempi adatti:

Ottieni la fonte, compila e gioca con essa. Non devi presentare patch o qualsiasi cosa che sia di fantasia, basta esplorare il codice e apportare piccole modifiche qua e là per vedere cosa succede. È un processo incrementale, più giochi con esso, più facile sarà capire cosa fa il codice. Se il primo progetto che hai scelto sembra estremamente difficile da capire, passa a quello successivo.

Un'altra ottima opzione sarebbe concentrarsi sulla creazione di un motore per MySQL, come @ N.B. suggerisce in una risposta precedente .

Se raggiungi un punto in cui sei in grado di fare qualcosa di utile con il codebase, partecipa alla comunità del progetto, questo è il modo più semplice per trovare risorse più dettagliate sui concetti coinvolti.

E poi, finalmente, inizia a lavorare sul tuo database. All'inizio potresti semplicemente scrivere un clone estremamente ridimensionato del codice che hai esplorato. Non deve essere originale, alcuni grandi progetti iniziati come cloni o forchette.

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

Ci sono alcuni libri:

E alcune centinaia di altri, oltre a una miriade di documenti accademici che potresti facilmente rintracciare tramite Google. Devi prima definire cosa vuoi fare e poi cercare un libro. Essere coinvolti in una comunità di altri autori di database ti aiuterà anche a restringere l'elenco dei libri e forse a ottenere suggerimenti molto migliori di quelli sopra.

Buona fortuna! Mi aspetto un commento con un link al tuo repository quando hai finito. E se non hai mai finito, assicurati di lasciare un commento per ricordarmi che non ho ancora finito quel compilatore che ho iniziato a scrivere nel 2001.

    
risposta data 25.11.2011 - 12:47
fonte
24

Dovresti semplicemente farlo e smettere di pensare troppo. Godersi il processo di apprendimento e l'entusiasmo sono doni.

Chiedere agli altri se è una buona idea non è certamente una buona strategia . Se avessi ascoltato tutte le rane, lavorerei ancora all'Ikea oggi spingendo il carrello della spesa dal parcheggio al deposito.

Non devi giustificarti come ha fatto Ayende in quel post interessante . La domanda 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 ti piace il processo, non preoccuparti dell'obiettivo, hai già vinto.

    
risposta data 25.11.2011 - 10:21
fonte
6

"(è" orientato al nodo ", se esiste anche)". - Questo potrebbe essere il motivo per cui non stai trovando molto!

Immergiti con la versione 0.1 e guarda dove trovi. Potresti imparare di più provando a produrre quello che vuoi chiedendo che cosa "dovresti" fare. Dagli qualche giorno e poi controlla dove hai.

Circa 18 anni fa ho scritto un sistema base di database (per divertimento, vai figura) con indici btree e ho imparato moltissimo.

    
risposta data 25.11.2011 - 11:25
fonte
4

MySQL ha una struttura del motore di storage collegabile, potrebbe essere un'idea dare un'occhiata a come vengono creati i motori per lavorare con MySQL .

    
risposta data 25.11.2011 - 10:41
fonte
4

Sembra un grande progetto. Apparentemente il tuo obiettivo non è quello di creare un software di produzione, ma di conoscere i database e il processo di creazione di un sistema di database.

Non penso davvero che tu debba fare molte ricerche. Sembra che lo scopo sia quello di ottenere l'esperienza di ciò che accade alla creazione di un sistema di database basato su nodi.

Ecco come vorrei iniziare:

  1. Scegli la tua lingua preferita o una lingua che vuoi migliorare.
  2. Crea l'oggetto nodo (o quello che è più vicino nella tua lingua). Scopri come collegarli.
  3. Crea un breve elenco di istruzioni SQL che implementerai per prime.
  4. Decidi come salvare i dati. Una soluzione ovvia è serializzare tutti i nodi, caricarli all'avvio del programma e salvarli al termine del programma.

Una volta che le nozioni di base funzionano, avrai molte più informazioni su ciò che è difficile o problematico. Quindi puoi fare qualche ricerca al riguardo, trovare alcuni miglioramenti e integrarli.

    
risposta data 26.11.2011 - 02:07
fonte
3

Scrivere il proprio database "in modo da capire come funziona" è l'unica buona ragione per farlo (poiché i database sono pazzeschi difficili da ottenere e difficili da dimostrare). Sei pazzo, ma in senso positivo!

Per vedere come è fatto, suggerisco di guardare SQLite. La sorgente SQLite ha una compressione di soli 1,3 MB ed è un database transazionale completamente compatibile con ACID. È anche dominio pubblico e l'autore principale è un bravo ragazzo che sono sicuro che sarà felice di rispondere alle tue domande. (Penso che i bit più complicati arrivino a come trasferire veramente le informazioni sul disco, persuadere i sistemi operativi e l'hardware a smettere di mentire e scrivere davvero la transazione ORA è sorprendentemente difficile e perché sono così felice di non doverlo mai scrivere un DB.)

    
risposta data 25.11.2011 - 12:52
fonte
3

Acquista un libro:

link

Gli indici sono oggi l'aspetto più importante dei database. Studia le alternative che esistono come alberi binari.

Leggi anche il prodotto cartesiano che è un modo per calcolare quanto saranno complessi i join.

    
risposta data 25.11.2011 - 13:16
fonte
3

I need to learn how databases work

Scopri l'algebra relazionale.

Trova un piccolo motore DB, impara la fonte.

in order to use them more efficiently

No. Hai bisogno di imparare come utilizzare in modo efficiente un database. Potresti essere un pilota migliore se capisci come funziona la tua auto, ma sarai un pilota molto migliore se ti concentri davvero sulla guida.

Segui le rotte tradizionali: segui un corso, leggi un libro, la peer review, fai domande, usa l'indice luke .

    
risposta data 25.11.2011 - 16:40
fonte

Leggi altre domande sui tag