Necesito aprender cómo funcionan las bases de datos para usarlas de manera más eficiente, y mi forma de aprender es hacerlo.
Quiero crear mi propio sistema de base de datos. No me estoy refiriendo a crear una pseudo-base de datos que usaría la consulta para analizar archivos; esto sería simplemente 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 (está "orientado a nodos", si es que existe), necesitaría cualquier recurso para ser lo más abstracto y de alto nivel posible.
Entonces, ¿cómo haría para crear eso? ¿Qué recursos / tutoriales / libros puedo leer para entender?
El idioma no importa en lo más mínimo. Idealmente, el código sería un seudocódigo para ilustrar el concepto, no vinculado a un lenguaje en particular, pero cualquier cosa serviría. No pude encontrar nada sobre el tema en google (dado que soy muy analfabeto en el tema, tal vez simplemente no estoy ingresando 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.
fuente
I studied open-source DBs, but their codebase is too huge
: Si algo como redis o flockdb es demasiado grande para que lo leas, no veo cómo harás frente a la escritura o la propia base de datos.Respuestas:
Empieza aqui. 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 el historial del dominio y la terminología adecuada y tener al menos una idea de alto nivel de la arquitectura. Podrías comenzar desde el artículo de Wikipedia sobre 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.
Luego, elige Relacional o NoSQl. Si elige NoSQL, debe elegir un tipo de NoSQL. Eso es extremadamente importante, no encontrará ningún documento arquitectónico que discuta todas las diferentes familias de bases de datos. Realmente no importa cuál elijas, solo elige uno y quédate con él.
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:
Algunos ejemplos que encajan:
Obtenga la fuente, compílela y juegue con ella. No tiene que enviar parches ni nada que le guste, simplemente explore el código y realice 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á comprender lo que hace el código. Si el primer proyecto que eligió parece extremadamente difícil de entender, simplemente pase al siguiente.
Otra gran opción sería concentrarse en construir un motor para MySQL, como sugiere @NB en una respuesta anterior .
Si llega a un punto en el que puede hacer algo útil con la base de código, participe 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, comience a trabajar en su base de datos. Al principio, podría 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.
Hay bastantes libros:
Y algunos cientos más, además de una miríada de trabajos académicos que puede rastrear fácilmente a través de Google. Primero debe definir lo que desea hacer y luego buscar un libro. Involucrarse con una comunidad de autores de bases de datos también lo ayudará a reducir la lista de libros y tal vez a obtener sugerencias mucho mejores que las anteriores.
¡Buena suerte! Espero un comentario con un enlace a su repositorio cuando haya terminado. Y si nunca has terminado, asegúrate de dejar un comentario recordándome que todavía no he terminado el compilador que comencé a escribir en 2001.
fuente
I'm expecting a comment with a link to your repository when you're done
: ¡definitivamente! Gracias de nuevo, a usted y a todos los demás, esto fue realmente inspirador.Deberías hacerlo y dejar de pensar demasiado. Disfrutar el proceso de aprendizaje y el entusiasmo son regalos.
Preguntar a otros si es una buena idea ciertamente no es una buena estrategia . Si hubiera escuchado a todas las ranas, todavía estaría trabajando en Ikea hoy empujando el carrito de compras desde el estacionamiento hasta el depósito.
No tienes que justificarte como lo hizo Ayende en esa interesante publicación . La pregunta fue:
Si te agrada el proceso, no te preocupes por el objetivo, ya has ganado.
fuente
"(está" orientado a nodos ", si eso incluso existe)". - ¡Esta puede ser la razón por la que no encuentras mucho!
Sumérjase con la versión 0.1 y vea dónde llega. Puede aprender más al tratar de producir lo que quiere y al preguntar qué "debería" hacer. Déle unos días y luego revise dónde lo tiene.
Hace unos 18 años escribí un sistema de base de datos básico (por diversión, imagínense) con índices btree y aprendí muchísimo.
fuente
MySQL tiene una estructura de motor de almacenamiento conectable, puede ser una idea comprobar cómo se crean los motores para que funcionen para MySQL.
fuente
Suena como un gran proyecto. Aparentemente, su objetivo no es crear un software de producción, sino aprender sobre bases de datos y el proceso de creación de un sistema de base de datos.
Realmente no creo que necesites investigar mucho. 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 comenzaría:
Después de que funcione lo básico, tendrá mucha más información sobre lo que es difícil o problemático. Luego puede investigar un poco al respecto, encontrar algunas mejoras e integrarlas.
fuente
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 corregir y difíciles de probar). Estás loco, pero en el buen sentido!
Para ver cómo se hace, sugiero mirar SQLite. La fuente SQLite solo tiene una compresión de aproximadamente 1.3 MB, y es una base de datos transaccional totalmente compatible con ACID. También es de 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 las partes más complicadas vienen en cómo realmente enviar información al disco; persuadir a los sistemas operativos y al hardware para que dejen de mentir y realmente escriban la transacción AHORA es sorprendentemente difícil y por eso estoy tan contento de nunca tener que escribir una base de datos).
fuente
Compra un libro:
http://www.springer.com/computer/database+management+%26+information+retrieval/book/978-1-84628-394-9
En la actualidad, los índices son el aspecto más importante de las bases de datos. Estudie las alternativas que existen como los árboles binarios.
Lea también sobre el producto cartesiano, que es una forma de calcular cuán complejas serán las uniones.
fuente
Aprende álgebra relacional.
Encuentre un pequeño motor de base de datos, aprenda la fuente.
No. Necesita aprender a usar eficientemente una base de datos. Puede ser un mejor conductor si comprende cómo funciona su automóvil, pero será un mejor conductor si realmente se concentra en conducir.
Tome las rutas tradicionales: tome un curso, lea un libro, una revisión por pares, haga preguntas, use el índice luke .
fuente
Learn relational algebra.
Suponiendo op está interesado en las bases de datos relacionales, por supuesto ...