antoniosarosi/mkdb has 894 GitHub stars and 82 forks. GitHot measured 0 stars in 24 hours and +1 in 7 days. Last checked 2026-11-12 00:42 UTC. Last push 2024-10-21.
Toy Database
측정된 스타 증가
- in 24h
- 0
- in 7 days
- +1
- in 15 days
- 기록 수집 중
- in 1 month
- 기록 수집 중
서로 겹치는 기간의 순증가량이며 일별 합계가 아닙니다. 측정값이 없으면 비워 둡니다. 스타는 관심도를 나타내며 품질을 보장하지 않습니다.
README.md
OriginalMKDB
Toy database implemented for learning purposes. Almost all of the implementation ideas come from these resources:
Other less important resources are linked in the source code.
Compilation
Install rustup if you don't have it and then install the
nightly toolchain:
rustup toolchain install nightly
Use cargo to compile the project:
cargo +nightly build
Alternatively, set your default toolchain to nightly to avoid specifying
+nightly for every cargo command:
rustup default nightly
Compiler Version
If you see any compilation errors it's probably because of the compiler
version. Run rustc +nightly --version and compare the output to the last
version used to compile and test the project:
rustc 1.78.0-nightly (9c3ad802d 2024-03-07)
Tests
Use cargo test to
run all the unit tests:
cargo +nightly test
Unsafe
All the unsafe code
is located in ./src/storage/page.rs, which is the
module that implements slotted pages. Miri
can be used to test possible undefined behaviour bugs. Install the component
using rustup:
rustup +nightly component add miri
Then use cargo to test the page module:
cargo +nightly miri test storage::page::tests
The ./src/paging/ and
./src/storage/btree.rs modules are not unsafe
themselves but they heavily rely on the slotted page module so it's worth
testing them with Miri as well:
cargo +nightly miri test paging
cargo +nightly miri test storage::btree
If all these modules work correctly without UB then the rest of the codebase
should be fine. The ultimate UB test is the ./src/db.rs module
since it's the entry point to SQL execution so it makes use of every other
module. It can be tested with Miri as well since tests are configured to run
completely in memory without files or system calls:
cargo +nightly miri test db::tests
The rest of modules don't make any use of unsafe code so it's not necessary to test them with Miri.
Running The Program
Use this command to start the TCP server on port 8000 (the default if not
specified):
cargo +nightly run -- file.db 8000
file.db can be any empty file or a file previously
managed by mkdb. It works like SQLite in that regard, the difference is that
in order to use mkdb you have to connect to the server with some TCP client
that implements the network protocol described at
./src/tcp/proto.rs. The ./client package
is a console client similar to that of MySQL or any other database and can be
used like this:
cargo +nightly run --package client -- 8000
This will connect to the mkdb server running on port 8000 and provide you with
a shell where you can type SQL and see the results of the queries.
관련 프로젝트 살펴보기
Asabeneh/30-Days-Of-Python
30 Days of Python 프로그래밍 챌린지는 Python 프로그래밍 언어를 30일 동안 배우기 위한 단계별 가이드입니다. 이 챌린지는 100일 이상 걸릴 수 있습니다. 자신의 속도에 맞춰 진행하세요. 다음 동영상도 도움이 될 수 있습니다: https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,560 스타grafana/grafana
개방적이고 조합 가능한 옵저버빌리티 및 데이터 시각화 플랫폼입니다. Prometheus, Loki, Elasticsearch, InfluxDB, Postgres 등 여러 소스의 메트릭, 로그, 트레이스를 시각화합니다.
77,830 스타redis/redis
실시간 데이터 기반 애플리케이션을 구축하는 개발자에게 Redis는 가장 선호되고, 가장 빠르며, 기능이 가장 풍부한 캐시, 데이터 구조 서버이자 문서 및 벡터 쿼리 엔진입니다.
77,395 스타apache/superset
Apache Superset는 데이터 시각화 및 데이터 탐색 플랫폼입니다.
75,473 스타