/SamehadaDB_old

A Simple Relational Database implemented in Golang

Primary LanguageGoMIT LicenseMIT

Overview

  • 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

What is Samehada?

  • 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)

Current Status

Procedure of Executing SamehadaDB (executing unit tests)

  • 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
  • Executing all unit tests which test several features and components of SamehadaDB except several tests taking long time

Roadmap

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)
  • 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
  • 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
  • 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

More Info

Advisor

Past work

FunnelKVS: Rust implementation of autonomous distributed key-value store which has REST interfaces