This is a high level design of a simple database system. WIP.
- Use custom protocol that will be designed later.
- Security is completely out of scope.
-
Takes a string
-
Checks for syntax errors?
-
Returns a parse tree
-
maybe nom?
- Takes a parse tree
- Checks for semantic errors (for exmaple, no such table)
- Returns a query plan (logical plan)
- Takes a query plan
- Optimizes the query plan
- Returns an optimized query plan (physical plan)
- Takes a physical plan
- Executes the query
- Returns the result (in what format?)
- Declares methods:
get_by_key(key: bytes) -> bytes
put(key: bytes, value: bytes) -> None
delete(key: bytes) -> None
scan(start_key: bytes, end_key: bytes) -> Iterator[Tuple[bytes, bytes]]
- guarantee ACID properties -> WAL
- Config file?
- Metadata about tables, columns, indexes, etc.