- Simple Relational Database Implemented in Golang
- This code tree is based on Golang ported BusTub RDBMS: go-bustub
- original code of go-bustub is here
- Samehada, which literally means shark skin, is a tool used to grate wasabi, usually for sushi, but also for other Japanese cuisines
- Samehada features its grid shape that forms air bubbles between the grated wasabi, minimizing unnecessary spiciness
- We are proud to call SamehadaDB because the grid produces a pleasant taste and aroma with a nice harmony
- (The text in this section was contributed by ujihisa. Thanks ujihisa)
- SamehadaDB can be used as simple embedded DB (library form)
- Simple Single Page Application Demo (TODO App)
- Above demo uses SamehadaDB on backend API server
- ATTENTION: SamehadaDB is not developed for productional use! There are no warranties!
- By the way, procedure described on next section executes almost all defined unit tests except these of taking long time
- Please install golang environment with package system your OS has (apt, yum, brew ...etc)
- If you use Windows, you can select both Windows native environment and WSL Ubuntu environment
- If you select Windows native environments or golang environment which is installed with package system can't execute SamehadaDB, you should install official binary directly
- Please refer Download and Install - The Go Programming Language
- Executing all unit tests which test several features and components of SamehadaDB except several tests taking long time
- $ git clone https://github.com/ryogrid/SamehadaDB.git
- $ cd SamehadaDB
- $ go clean -testcache; go test ./... -short -v
Note:
Statuses described berow are of backend and dont't mean supported features of SamehadaDB when you use our DB through frontend.
(now, embeded DB form only exists)
- Predicates on Seq Scan
- Multiple Item on Predicate: AND, OR
- Predicates: <, >, <=, >=
- Null
- Inline types (
integer, varchar, float, boolean, bigint, smallint, decimal, timestamp, datetime and etc) - Delete Tuple
- Update Tuple
RESTRICTION: a condition which update transaction aborts on exists
- LIMIT / OFFSET
- Varchar
- Persistent Catalog
- Updating of Table Schema
-
LRU replacer - Latches
- Transactions
- Rollback When Abort Occurs
- Logging
- Checkpointing
- Simple Checkpointing (all transaction block until finish of checkpointing)
- Fuzzy Checkpointing (ARIES)
- Recovery from Logs
- Index
- Hash Index
- Hash index can be used only equal(==) operator is specified to index having columns
- When the system exits in not graceful, reconstruction of index data is needed at reboot of system now
- SkipList Index
Tree Based Index- Logging/Recovery of Index Data (Redo/Undo)
- Hash Index
- JOIN
- INNER JOIN (Hash Join)
- Currently, only two tables JOIN is implemented and condition specified at ON clause should be composed of single item
- CROSS JOIN
- INNER JOIN (Hash Join)
- Aggregations (COUNT, MAX, MIN, SUM on SELECT clause including Group by and Having)
- Sort (ORDER BY clause)
- Tuple Level Locking With Strong Strict 2-Phase Locking (SS2PL) Protocol
- Concurrent Execution of Transactions
- Avoidance of phantom problem is not implemented yet
- So, current transaction isolation level is "REPEATABLE READ"
- Retry of txns aborted due to concurrency control protocol is not implemented yet
- Avoidance of phantom problem is not implemented yet
-
Execution Planning from hard coded SQL like method call I/F (like some kind of embedded DB) - Execution Planning from Query Description text (SQL)
- Frontend Impl as Embedded DB Library (like SQLite)
- Currently, functions of the library are not thread safe and concurrent transaction is not supported
- Deduplication of Result Records (Distinct)
- Query Optimization
- AS clause (View Management)
- JOIN (more than two tables)
- Nested Query
- DB Connector (Driver) or Other Kind Access Interface
- Original Protocol
- MySQL or PostgreSQL Compatible Protocol
- REST
- Deallocate and Reuse Page
- Need tracking page usage by BufferPoolManager or TableHeap and need bitmap in header page corresponding to the tracking
- UNION clause
- Eliminate Data Processing with Placing All Scanned Tuples on the Memory
- Communication over SSL/TLS
- Authentication
- kumagi and more!
FunnelKVS: Rust implementation of autonomous distributed key-value store which has REST interfaces