No hay mucho tiempo para responder, pero:
- Supongo que está escribiendo esto en C o C ++, porque todas las bases de datos de alto rendimiento lo son. Podría usar otro lenguaje como Java, Go o Rust, pero la gran mayoría de los algoritmos de ejemplo están en C. También Java y Go están administrados por memoria. Créanme, todos los administradores de bases de datos de potencia industrial terminan siendo algo parecido a los mini sistemas operativos, el administrador de memoria incluido y la recolección de basura en lenguajes como Java y Go harían las cosas demasiado complicadas y difíciles de predecir.
- Obviamente, escríbalo en muchos archivos de origen pequeños y tenga una API clara para usar en otros idiomas, como PHP. SQLite tiene un mecanismo maravilloso para esto, debes conocerlo.
- Supongo que no desea limitarse a la memoria, sino que desea bases de datos de un tamaño limitado únicamente por disco. Probablemente sea mejor implementar la estructura de datos primaria como un árbol B, B + o B *. Estos permiten un buen equilibrio entre las velocidades de lectura y escritura.
- Es posible que desee utilizar alguna variante de yacc y lex para analizar SQL. Sin embargo, no hay nada de malo en escribir a mano su intérprete como un analizador de descenso recursivo. La última técnica le permitirá una mayor flexibilidad y un mejor manejo de errores; El primero es mucho más fácil de iterar.
Buena suerte. ¡Es un proyecto emocionante!