Crear mi propio sistema de base de datos [cerrado]

61

Necesito aprender cómo funcionan las bases de datos para usarlas de manera más eficiente, y mi forma de aprender es haciendo.

Quiero crear mi propio sistema de base de datos. No me refiero a crear una pseudo-base de datos que use la consulta para analizar archivos; esto simplemente sería una interfaz de sistema de archivos con un lenguaje de consulta. Estoy hablando de la estructura real de un motor de base de datos. Y dado que lo que tengo en mente no es ni relacional ni orientado a documentos (si está "orientado a nodos", si es que existe), necesitaría que cualquier recurso sea lo más abstracto y de alto nivel posible.

Entonces, ¿cómo haría para crear eso? ¿Qué recursos / tutoriales / libros puedo leer para comprender?

El idioma no importa en lo más mínimo. Idealmente, el código sería un pseudocódigo para ilustrar el concepto, no vinculado a un lenguaje en particular, pero cualquier cosa haría. No pude encontrar nada sobre el tema en google (ya que soy muy analfabeto en el tema, tal vez no esté ingresando en la búsqueda correcta).

Si dichos recursos no están disponibles, supongo que algo sobre cómo crear un cliente sería al menos un paso en la dirección correcta.

    
pregunta Xananax 25.11.2011 - 07:15

8 respuestas

56
  

(es "orientado a nodos", si es que existe)

Comience aquí. Cuando se trata de una aplicación compleja como una base de datos (incluso una base de datos simple es una aplicación compleja), debe estar familiarizado con la historia del dominio y la terminología adecuada y tener al menos una idea de la arquitectura de muy alto nivel. Puedes comenzar desde el artículo de Wikipedia en la Base de datos . Pasé unos días leyendo todos los artículos sobre los conceptos relacionados y los diferentes tipos de bases de datos.

  

Y dado que lo que tengo en mente no es ni relacional ni orientado a documentos

A continuación, selecciona Relacional o NoSQl. Si elige NoSQL, debe elegir un tipo de NoSQL. Eso es extremadamente importante, no encontrará ningún documento de arquitectura que discuta las diferentes familias de bases de datos. Realmente no importa cuál elijas, solo elige uno y quédate con él.

  

El idioma no importa en lo más mínimo.

Sí, lo hace (desafortunadamente), porque después de elegir una familia de bases de datos, debe comenzar a explorar el código de las bases de datos de código abierto de esa familia. Hay algunas pautas genéricas sobre qué buscar:

  • Base de código relativamente pequeña,
  • Documentos arquitectónicos o al menos un blog de desarrollo,
  • La base de datos que elija debe estar cerca de lo que se considera genérico en la familia, sería más difícil aprender si es altamente especializado.

Algunos ejemplos que encajan:

Obtenga la fuente, compílela y juegue con ella. No tiene que enviar parches ni nada que le interese, solo explore el código y haga pequeñas modificaciones aquí y allá para ver qué sucede. Es un proceso incremental, cuanto más juegues con él, más fácil será entender lo que hace el código. Si el primer proyecto que eligió parece extremadamente difícil de entender, simplemente continúe con el siguiente.

Otra gran opción sería concentrarse en la construcción de un motor para MySQL, como @NB. sugiere en una respuesta anterior .

Si llega a un punto en el que puede hacer algo útil con el código base, involucrarse en la comunidad del proyecto, esa es la forma más fácil de encontrar recursos más detallados sobre los conceptos involucrados.

Y luego, finalmente, comienza a trabajar en tu base de datos. Al principio, simplemente puede escribir un clon extremadamente reducido del código que ha estado explorando. No tiene que ser original, bastantes grandes proyectos comenzaron como clones o tenedores.

  

¿Qué recursos / tutoriales / libros puedo leer para entender?

Hay bastantes libros:

Y algunos otros cientos, además de una gran cantidad de documentos académicos que puedes rastrear fácilmente a través de Google. Primero debe definir qué desea hacer y luego buscar un libro. Involucrarse con una comunidad de colegas autores de bases de datos también lo ayudará a reducir la lista de libros y quizás obtener mejores sugerencias que las anteriores.

¡Buena suerte! Estoy esperando un comentario con un enlace a su repositorio cuando haya terminado. Y si nunca has terminado, asegúrate de dejar un comentario que me recuerde que todavía no he terminado el compilador que comencé a escribir en 2001.

    
respondido por el yannis 25.11.2011 - 12:47
24

Deberías hacerlo y dejar de pensar demasiado. Disfrutar del proceso de aprendizaje y el entusiasmo son regalos.

Preguntar a otros si es una buena idea no es una buena estrategia . Si hubiera escuchado a todas las ranas, todavía trabajaría en Ikea hoy empujando el carrito de la compra desde el estacionamiento hasta el depósito.

No tienes que justificarte como lo hizo Ayende en esa publicación interesante . La pregunta era:

  

Sin embargo, como desarrollador pragmático, me pregunto qué novedades ofrece este proyecto en un mercado saturado donde tiene alternativas bastante maduras como CouchDB, MongoDB, Tokio, Redis y muchas más.   Muchos de estos productos también son multiplataforma y se ejecutan a una velocidad C con un registro comprobado, y se usan en sitios web muy grandes donde sus capacidades de fragmentación y tolerancia a fallas se han llevado muy lejos.

Si se complace en el proceso, no se preocupe por el objetivo, ya ganó.

    
respondido por el user2567 25.11.2011 - 10:21
6

"(es" orientado a nodos ", si es que existe)". - ¡Esta puede ser la razón por la que no estás encontrando mucho!

Sumérgete con la versión 0.1 y mira dónde llegas. Puede aprender más tratando de producir lo que quiere, o preguntando qué "debería" hacer. Dale unos días y luego revisa dónde tienes.

Hace unos 18 años escribí un sistema de base de datos básico (por diversión, imagínate) con los índices de btree y aprendí muchísimo.

    
respondido por el Jaydee 25.11.2011 - 11:25
4

MySQL tiene una estructura de motor de almacenamiento conectable, podría ser una idea revisar cómo se crean los motores para trabajar en MySQL .

    
respondido por el Mjh 25.11.2011 - 10:41
4

Suena como un gran proyecto. Al parecer, su objetivo no es crear un software de producción, sino aprender sobre las bases de datos y el proceso de creación de un sistema de bases de datos.

Realmente no creo que necesites hacer mucha investigación. Parece que el propósito es obtener la experiencia de lo que implica crear un sistema de base de datos basado en nodos.

Así es como empezaría:

  1. Elija su idioma favorito o el idioma que desea mejorar.
  2. Cree el objeto de nodo (o lo que sea más cercano en su idioma). Averigua cómo vincularlos.
  3. Haga una lista corta de las declaraciones SQL que implementará primero.
  4. Decida cómo guardar los datos. Una solución obvia es serializar todos los nodos, cargarlos cuando se inicie el programa y guardarlos cuando finalice.

Una vez que hayas empezado a trabajar lo básico, tendrás mucha más información sobre lo que es difícil o problemático. Luego, puede investigar un poco, encontrar algunas mejoras e integrarlos.

    
respondido por el B Seven 26.11.2011 - 02:07
3

Escribir su propia base de datos "para entender cómo funciona todo" es la única buena razón para hacerlo (ya que las bases de datos son muy difíciles de entender y difíciles de probar). ¡Estás loco, pero de buena manera!

Para ver cómo se hace, sugiero mirar a SQLite. La fuente SQLite solo está comprimida a aproximadamente 1.3MB, y es una base de datos transaccional totalmente compatible con ACID. También es dominio público y el autor principal es un buen tipo que estoy seguro de que estará encantado de responder a sus preguntas. (Creo que los bits más complicados se encuentran en la forma de enviar realmente la información al disco; persuadir a los sistemas operativos y al hardware para que dejen de mentir y escriban la transacción AHORA es sorprendentemente difícil y por eso estoy tan contento de no tener que hacerlo. escribe un DB.)

    
respondido por el Donal Fellows 25.11.2011 - 12:52
3

Compra un libro:

enlace

Los índices son, en la actualidad, el aspecto más importante de las bases de datos. Estudia las alternativas que existen como árboles binarios.

También lea sobre producto cartesiano que es una forma de calcular cómo serán las combinaciones complejas.

    
respondido por el jgauffin 25.11.2011 - 13:16
3
  

Necesito aprender cómo funcionan las bases de datos

Aprende álgebra relacional.

Encuentre un pequeño motor de base de datos, conozca la fuente.

  

para usarlos más eficientemente

No. Necesitas aprender a usar eficientemente una base de datos. Podría ser un mejor conductor si entiende cómo funciona su automóvil, pero será mucho mejor si realmente se enfoca en la conducción.

Tome las rutas tradicionales: tome un curso, lea un libro, haga una revisión por pares, haga preguntas, use el índice luke .

    
respondido por el Incognito 25.11.2011 - 16:40

Lea otras preguntas en las etiquetas