Es como todo: Hacer una version que pueda competir con los grandes es todo un rollo, pero una version basica no tanto:
https://cstack.github.io/db_tutorial/
Un ejemplo es decir "voy a cojer varios archivos .csv, donde cada uno es una tabla, y .csvi que es lo mismo pero para indices" y empezar a hacer los métodos de consulta y actualización.
Asi no parece tan difícil, cierto?
En sintesis, un motor de BD es "simplemente" una interface como:
Código Delphi
[-]
TDatabase = class
function Open(var file: String): TDatabaseInstance;
end;
TDatabaseInstance = class
function New(var file: String): TDatabaseInstance;
function add_record(var tableId: Int, var: Data):TDataResult;
function update_record(var tableId: Int, var: Data):TDataResult;
function delete_record(var tableId: Int, var: Data):TDataResult;
function seek_record(var tableId: Int, var: Query):TDataResult;
end;
Donde se pone todo un rollo es en:
- Como hago para que varios thread actualicen los datos en un mismo archivo?
- Y como hago que ese archivo sea MUCHO mas eficiente que un .csv?
- Y como implemento un protocol ACID?
El resto (pasear SQL, ejecutarlo, hacer drivers, ...) es relativamente "simple" (bueno siempre y cuando no intenten implementar toda la especificación de SQL!).
Los 3 pasos anteriores son los quebraderos de cabeza, pero como todo tienen su "nivel simple, basico, decente y mounstroso!"