¿Crear tu propia base de datos?

Rustin

Madmaxista
Desde
10 Sep 2018
Mensajes
1.090
Reputación
4.186
jorobar, pues por qué no. No hay que dar nada por supuesto. A este paso, lo único que vamos a conocer va a ser besarle los pies a Bezos.

Si en algún momento deja de haber gente que quiera reinventar la rueda, con el fin de aprender y así poder crear soluciones que puedan contribuir a descentralizar el conocimiento y las tecnologías, estaremos todos bien dolidos.
 

Rustin

Madmaxista
Desde
10 Sep 2018
Mensajes
1.090
Reputación
4.186
Es cierto que tengo muchas cosas que aprender, pero las llevo todas de forma bastante organizada. Trabajo en media jornada porque puedo, y prefiero, vivir como un lonchafinista con menos salario a tener menos tiempo. El resto del día, estoy dedicando entre 6-8h a aprender. Mi idea era meterme con el tema de las BD una o dos horas al día, durante tres o cuatro años para tener un conocimiento mucho más sólido del que tengo ahora, que es básicamente el que tiene el 99% de los programadores: utilizar la API creada por otro tío y no saber cuál es la magia que la hace funcionar.

Con el tema de la informática procuro seguir un enfoque "descendente", desde las capas de la aplicación hasta las de bajo nivel. Por eso me parece que el estudio de las BD podría ser el siguiente paso más coherente.
 

TitusMagnificus

Madmaxista
Desde
6 May 2014
Mensajes
2.059
Reputación
2.594
Lugar
Adivina, aquí no hay playa
Hola Shur.

3 búsquedas darán el resultado de lo que necesitas: "database internals", "architecture database" y "SQL Algorithms". Quora, GitHub o incluso REDIT son otras fuentes en las que buscar.

A partir de ahí, las necesidades irán viniendo solas y Google o cualquier de los foros te ayudarán. Yo hice mi proyecto de fin de carrera hace mogollón precisamente con esto, aunque no pude consultar todas estas fuentes y fui perfectamente capaz de acabar (más o menos) el access de aquellas fechas (más bien se parecía a un DBase que Access). Con los lenguajes actuales será más sencillo que con C que era lo disponible.
 

Rustin

Madmaxista
Desde
10 Sep 2018
Mensajes
1.090
Reputación
4.186
Gracias @ai-apaec! Eres un máquina. Tus contribuciones son siempre más que bienvenidas! Ahora mismo estoy centrándome en Rust. Me pondré a aplicar los conceptos de las estructuras de datos con ese lenguaje.
 

MiNombreEsFantasma

Madmaxista
Desde
20 Jul 2015
Mensajes
6.155
Reputación
13.961
Detrás de un software como un DBMS existen un compendio de tecnologías y teoría que requiere una buena base teórico-práctica.

Es decir, pongamos que quieres empezar haciendo un Producto Mínimo Viable donde tengamos:

- El sistema de almacenamiento que sea mínimamente decente (al menos, que las consultas sean rápidas) Es decir, un indexado viable y poco más.
- SQL básico para consultas y updates.
- Conexión TCP/IP de los clientes

Dejémoslo ahí.

Sólo para estas tres cosas mínimamente funcionales, implica tener claro todo esto:

- Saber programar. Recalco SABER, con todo lo que ello implica.

- Al menos tener una buena base teórica del manejo de almacenamiento secundario y todo los problemas que implica.

- Estructuras de datos para manejo de almacenamiento secundario. Esto tiene muchísimo tema. Desde el manejo de estrucuras de datos de indexación como árboles-B (el más usado en los sistemas actuales) pasando por todo el manejo eficiente de ficheros. Puedes utilizar sistemas ya hechos como ISAM (este es un sistema de indexado secuncial), pero ya debes estudiarlo y aprender a utilizarlo para lo tuyo.

- Motor básico interpretación de SQL, con todo el manejo de la teoría de gramáticas formales, intérpretes y demás. Supongo que ya habrá cosas hechas pero, como siempre, debes al menos saber un poco de que va todo eso para poder adaptarlo.

- Gestión de conexiones TCP/IP, es decir, aprender al menos la teoría y funcionamiento básico de hacer programas cliente/servidor

- Estudiar el código de algún DBMS algo reducido y de código abierto. Una candidato podría ser h2database/h2database Pero para que el estudio de ese código sea productivo y te valga, no sólo debes comprender todo lo que he puntualizado anteriormente,
sino que encima debes al menos tener una base teórica de sistemas de datos relacionales. El libro que te han puesto, el de Navathe, es muy conocido.

Y si lo que quieres es hacer una DB tipo MemDB, de clave/valor, todo lo anteriormente expuesto sigue teniendo que estudiarse, poniendo especial énfasis en arquitecura cliente/servidor y estructuras de datos en memoria y colas. El código fuente de Redis es otra cosa a tener en cuenta.

Yo no suelo opinar ni decir a nadie lo que debe hacer. Pero creo que ponerse con esto lo único que tiene de útil es como un reto intelectual y divertimento. No veo que te sirva para nada más.
 
Última edición:

reconvertido

Será en Octubre
Desde
29 Ago 2010
Mensajes
40.836
Reputación
56.338
El mejor comentario para mi gusto.
 
Última edición:

reniris

Madmaxista
Desde
29 Ago 2014
Mensajes
1.252
Reputación
4.213
Pregunta para los más listos en informática del foro, que sé que hay unos cuantos.

En el terreno de la informática, si hay algo que siempre se da por hecho, es usar una base de datos ya existente. Es comprensible, claro que sí; nadie va a fiarse de una solución paco para gestionar datos importantes. Sin embargo, es un ejercicio (crear tu propia base de datos) que no vendría mal hacer para entender mejor cómo funcionan, y desarrollar un razonamiento propio sobre el tema.

Así pues, ¿alguien conoce buenos libros, manuales, tutoriales, etc., para programar tu propia base de datos desde 0? Básicamente, algo que trate desde el nivel más bajo posible, y que discuta la lógica para tomar una decisión de diseño u otra. He buscado libros pero todos son del tipo "crea tu base de datos con [mysql/mongo/etc]".

Yo lo que quiero crear es mi propia PacoDB. Hay tutoriales buenos para ello? Da igual que estén en inglés, claro. Acepto consejos de todos los ilustrísimos burbujos.

(Lo meto en Emprendedores porque ésta es una de mis preguntas sobre "cómo reinventar la rueda".)

Un saludo
Principalmente crear un sistema de bases de datos lo que necesita es que apliques la lógica y fundamental que sepas que información quieres guardar.

Ese es el trabajo mas difícil,no el lenguaje SQL en si (salvo 4 consultas compliacadas que puedas hacer).

Te puedo decir por experiencia en proyectos grandes que no se puede hablar que haya una solución digamos "buena",me explico puede que uno tenga que hacer 40 tablas de datos y otro haga 25 tablas y le lleguen. Pero puede que la base de datos de 40 tablas sea más clara y se entienda mejor para su uso y mantenimiento a posterior.

Como digo hacer una bases de datos es un poco como construir una casa.
 

MiNombreEsFantasma

Madmaxista
Desde
20 Jul 2015
Mensajes
6.155
Reputación
13.961
Pregunta para los más listos en informática del foro, que sé que hay unos cuantos.

En el terreno de la informática, si hay algo que siempre se da por hecho, es usar una base de datos ya existente. Es comprensible, claro que sí; nadie va a fiarse de una solución paco para gestionar datos importantes. Sin embargo, es un ejercicio (crear tu propia base de datos) que no vendría mal hacer para entender mejor cómo funcionan, y desarrollar un razonamiento propio sobre el tema.

Así pues, ¿alguien conoce buenos libros, manuales, tutoriales, etc., para programar tu propia base de datos desde 0? Básicamente, algo que trate desde el nivel más bajo posible, y que discuta la lógica para tomar una decisión de diseño u otra. He buscado libros pero todos son del tipo "crea tu base de datos con [mysql/mongo/etc]".

Yo lo que quiero crear es mi propia PacoDB. Hay tutoriales buenos para ello? Da igual que estén en inglés, claro. Acepto consejos de todos los ilustrísimos burbujos.

(Lo meto en Emprendedores porque ésta es una de mis preguntas sobre "cómo reinventar la rueda".)

Un saludo
Otra cosa que puedes hacer, que no se me ocurrió en su día cuando vi el hilo, es programar un Storage Engine para mysql. Con esto te centras exclusivamente en el motor de almacenamiento, no necesitas centrarte en temas de conectividad, SQL y usuarios. Sólo en el almacenamiento en sí. Es una buena forma de empezar y un proyecto entretenido.

Esto puede hacerse usando el API de desarrollo de plugins que ofrece mysql, más o menos bien documentado:


De hecho, el motor InnoDB, que usa mysql por defecto desde la versión 5, fue creado por una empresa externa usando el API de mysql. Mysql finalmente la compró e incorporó el motor en su base de código. Antes de esto, mysql usaba un motor tipo ISAM que tiene algunas limitaciones importantes.
 
Última edición:

sociedadponzi

never settle
Desde
30 Oct 2011
Mensajes
28.735
Reputación
54.365
Lugar
puerta de tannhäuser
espro que seas bueno programando para crear una DB

participe en este proyecto al inicio all por 2014

la creo un italiano, y al principio eramos como 4 o 5

es un caso de exito


por github tienes el codigo fuente

despues le compro SAP


de esa hice solo algunos commits porque era un espagueti (sera por lo del italiano pensando: ) y me pase a esta otra que tambien trabaje cuando la hacian en texas fue esta


que les compro Datastax

 
Última edición:

Rustin

Madmaxista
Desde
10 Sep 2018
Mensajes
1.090
Reputación
4.186
Leete "designing data intensive applications" de Kleepman
Justamente es el que estoy leyendo ahora. Es bastante bueno, aunque lo único que contiene sobre el tema de "crear desde 0" es una pequeña curiosidad sobre cómo usar Bash para crear un sistema de claves-valor.
 

thermoshit15

Madmaxista
Desde
14 Nov 2014
Mensajes
918
Reputación
2.273
Justamente es el que estoy leyendo ahora. Es bastante bueno, aunque lo único que contiene sobre el tema de "crear desde 0" es una pequeña curiosidad sobre cómo usar Bash para crear un sistema de claves-valor.
No es una pequeña curiosidad. Te abre la puerta a lo más sencillo que puedes implementar, de ahí complicarlo todo lo que tú quieras a traves de índices, b-trees, compactado si vas por algo tipo SST... El propio capítulo va dando los pasos lógicos. Evidentemente tienes que empezar por algun sitio y considera que hasta la base de datos más juca tiene muchos años de profesionales estudiando y solucionando complejidad que en estos momentos no sabes ni que existe.

Empieza por eso, puedes hacerlo en Linux con llamadas a sistema en C. Ya de por si algo así tan sencillo, controlando concurrencia, configuración básica, compactado, escritura a disco, etc suena a un reto que te cagas de bonito.
 

BHAN83

RoBot aspirador de esmegma
Desde
29 Sep 2010
Mensajes
23.237
Reputación
31.889
Lugar
Tesalia
MySQL es open source.

SQLite es opensource, y tiene lo basico de un motor de bd.

Mirate el codigo fuente en lugar de llorar en foros o buscar libros para dummies.

De todos modos veo que te han respondido hablando de que si como programar un lenguaje SQL, blabla.

Y supongo que esa es la parte que menos te interesara si haces tu propio motor de BD.

La parte interesante sera como almacenar datos y como hacer consultas rapidas, una interfaz de lenguage SQL seria lo de menos, ya que si haces tu el motor, la usaras directamente usando las funciones/clases que hayas creado.

Ante todo, la primera BD que usa un PC es el sistema de archivos. Quizas no necesites mucho mas para asegurar la integridad de tus datos. Y a partir de ahi ya puedas crearte tablas para optimizar busquedas.
 

Conde Duckula

Madmaxista
Desde
6 May 2016
Mensajes
19.923
Reputación
42.530
En mi proyecto actual lo tienen hecho en cierto modo. Creo que no han ganado nada. Absolutamente nada. Y las consecuencias en forma de curro, quebraderos y mareos son terribles.