RisingLight is an OLAP database system for educational purpose.

Overview

RisingLight

CI

RisingLight is an OLAP database system for educational purpose. It is still in rapid development, and should not be used in production.

Quick Start

Currently, RisingLight only supports Linux or macOS. If you are familiar with the Rust programming language, you can start an interactive shell with:

cargo run
# or start in release mode
cargo run --release

Otherwise, see Install, Run, and Develop RisingLight for more information. We provide step-by-step guide on how to compile and run RisingLight from scratch.

After successfully building RisingLight, you may import some data and run SQL queries. See Running TPC-H Queries.

Documentation

All documentation can be found in docs folder. At the same time, dev docs are also available in make docs (latest) or crates.io (stable, to-be-released).

Roadmap

We plan to release a stable version of RisingLight in the near future, as well as a tutorial in Chinese on how to build an OLAP database from scratch. See the pinned Roadmap issue for more information.

License

RisingLight is under the Apache 2.0 license. See the LICENSE file for details.

Community

RisingLight developers are active in a variety of places:

Slack Channel

The RisingLight project is currently part of the RisingWave community. You may join RisingWave community with the invitation link. If the Slack link expires (which normally should not happen), please create an issue :)

After that, you may join risinglight-chinese and risinglight-english channel.

WeChat Group

If you want to join our WeChat group, please send an email to hezi at singularity-data.com with your WeChat ID. We will invite you to the WeChat group.

Contributing

If you have a bug report or feature request, welcome to open an issue.

If you have any question or want to discuss, join our WeChat group, Slack channel, or start a discussion on GitHub Discussions.

If you want to contribute code, see CONTRIBUTING for more information. Generally, you will need to pass necessary checks for your changes and sign DCO before submitting PRs. We have plenty of good first issues. Feel free to ask questions either on GitHub or in our chat groups if you meet any difficulty.

Acknowledgement

The RisingLight project was initiated by a group of college students who have special interests in developing database systems using modern programming technologies. The project is generously sponsored by Singularity Data, a startup innovating the next-generation database systems. Singularity Data is hiring top talents globally to build a cloud-native streaming database from scratch. If interested, please send your CV to hr at singularity-data.com.

Welcome to the RisingLight community!

Comments
  • Roadmap v0.2

    Roadmap v0.2

    In v0.2, we focus on sorting everything -- from the composite sort key and primary key indexing in storage layer, to sort merge executors in executor layer, to composite key support in catalog.

    Storage

    • [x] https://github.com/risinglightdb/risinglight/issues/588
    • [x] https://github.com/risinglightdb/risinglight/issues/589
    • [ ] refactor storage to support snapshot isolation
    • [ ] refactor VersionManager to include catalog

    Optimizer

    • [x] filter push-down optimizer rule for all operators
    • [x] #654
    • [ ] add property to plan nodes https://github.com/risinglightdb/risinglight/issues/601

    Executor

    • [x] optimize NestedLoopJoin to pull fewer data in memory https://github.com/risinglightdb/risinglight/issues/592
    • [x] https://github.com/risinglightdb/risinglight/issues/591
    • [x] https://github.com/risinglightdb/risinglight/issues/597
    • [ ] new expression framework to vectorize any scalar function and support type inference

    SQL

    • [x] support subquery in binder https://github.com/risinglightdb/risinglight/issues/578
    • [x] add function call support https://github.com/risinglightdb/risinglight/pull/581
    • [x] make catalog consistent https://github.com/risinglightdb/risinglight/issues/590

    Tutorial

    • [ ] basic query engine (expected April)
    • [ ] query execution
    • [ ] storage

    Test Framework

    • [x] https://github.com/risinglightdb/risinglight/issues/593

    We're still drafting detailed design for each item, stay tuned! If you are interested in any of the item, please ping us in community channel for instructions, or create a tracking issue for that, thanks!

    opened by skyzh 17
  • cli: support multi-line interactive mode

    cli: support multi-line interactive mode

    If i run the following sql line by line without ";", then the history.txt will not contain ";". It is not convient for me to copy the scripts from history.txt to the cli and run them together, as i need to add the ";" at the end of all sql sentence.

    > create table x (x int)
    > insert into x values (1)
    > insert into x values (2)
    > insert into x values (33333)
    > select * from x
    

    The history file:

    create table x (x int)
    insert into x values (1)
    insert into x values (2)
    insert into x values (33333)
    select * from x;
    
    enhancement 
    opened by xiaoyong-z 15
  • feat(executor): implement `SortMergeJoin` executor

    feat(executor): implement `SortMergeJoin` executor

    close https://github.com/risinglightdb/risinglight/issues/597 Should I add this executor to the PlanVisitor trait? I have marked this code with #[allow(dead_code)] to pass Clippy test

    opened by D2Lark 11
  • style: enable some useful rustfmt rules

    style: enable some useful rustfmt rules

    To unify the import style, we decided to set some import rules in rustfmt.toml. There are several possible alternatives in rustfmt, after discussing with @wangrunji0408 , we suggest using imports_granularity = Crate since it's neither verbose nor unreadable.

    opened by Sunt-ing 11
  • error:

    error: "make test" panic

    image this is in macos, but in linux no this panic.

    this backtrace in lldb

    error: need to add support for DW_TAG_base_type '()' encoded with DW_ATE = 0x7, bit_size = 0
    * thread #2, name = 'run_all_test_files', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
      * frame #0: 0x0000000100d03201 sqllogictest-c1220b23d556cde8`std::panicking::rust_panic_with_hook::hb5cf2b942ebf7bb4 at panicking.rs:700:9 [opt]
        frame #1: 0x0000000100d02e9e sqllogictest-c1220b23d556cde8`std::panicking::begin_panic_handler::_$u7b$$u7b$closure$u7d$$u7d$::h5d41b409a1cb79f6 at panicking.rs:581:13 [opt]
        frame #2: 0x0000000100d00727 sqllogictest-c1220b23d556cde8`std::sys_common::backtrace::__rust_end_short_backtrace::h6b84dfe55d649877 at backtrace.rs:139:18 [opt]
        frame #3: 0x0000000100d02b8a sqllogictest-c1220b23d556cde8`rust_begin_unwind at panicking.rs:577:5 [opt]
        frame #4: 0x0000000100d451df sqllogictest-c1220b23d556cde8`core::panicking::panic_fmt::h6e35c6dca7bd2e85 at panicking.rs:110:14 [opt]
        frame #5: 0x0000000100d452c5 sqllogictest-c1220b23d556cde8`core::result::unwrap_failed::hdde797a6a1745330 at result.rs:1737:5 [opt]
        frame #6: 0x0000000100647b78 sqllogictest-c1220b23d556cde8`core::result::Result$LT$T$C$E$GT$::unwrap::h1303342e706e9d0e(self=Err) at result.rs:1065:23
        frame #7: 0x00000001000c90ea sqllogictest-c1220b23d556cde8`risinglight::storage::secondary::SecondaryStorage::shutdown::_$u7b$$u7b$closure$u7d$$u7d$::hbeb355a5de0e2197((null)=ResumeTy @ 0x00007000020e4128) at mod.rs:147:9
        frame #8: 0x00000001000d0ec7 sqllogictest-c1220b23d556cde8`_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$::poll::h88b823443d35f800(self=Pin<&mut core::future::from_generator::GenFuture<risinglight::storage::secondary::{impl#0}::shutdown::{async_fn#0}>> @ 0x00007000020e44b8, cx=0x00007000020e4eb8) at mod.rs:84:19
        frame #9: 0x000000010008644d sqllogictest-c1220b23d556cde8`risinglight::db::Database::shutdown::_$u7b$$u7b$closure$u7d$$u7d$::h2d2008e83d5db015((null)=ResumeTy @ 0x00007000020e4940) at db.rs:53:31
        frame #10: 0x00000001000d1207 sqllogictest-c1220b23d556cde8`_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$::poll::ha5ba8cbe3cb443b0(self=Pin<&mut core::future::from_generator::GenFuture<risinglight::db::{impl#0}::shutdown::{async_fn#0}>> @ 0x00007000020e4b38, cx=0x00007000020e4eb8) at mod.rs:84:19
        frame #11: 0x00000001000d4521 sqllogictest-c1220b23d556cde8`tokio::park::thread::CachedParkThread::block_on::_$u7b$$u7b$closure$u7d$$u7d$::h9c6e796c5b4f4614 at thread.rs:263:54
        frame #12: 0x000000010009e6a1 sqllogictest-c1220b23d556cde8`tokio::coop::with_budget::_$u7b$$u7b$closure$u7d$$u7d$::h0fe8fd8f5b9be95b(cell=0x0000000104808800) at coop.rs:102:9
        frame #13: 0x00000001000d574a sqllogictest-c1220b23d556cde8`std::thread::local::LocalKey$LT$T$GT$::try_with::hb9f0c8a079da8334(self=0x0000000100e6b7a0, f={closure#0} @ 0x00007000020e4df0) at local.rs:413:16
        frame #14: 0x00000001000d4c14 sqllogictest-c1220b23d556cde8`std::thread::local::LocalKey$LT$T$GT$::with::hedfe7991d0ee6530(self=0x0000000100e6b7a0, f=<unavailable>) at local.rs:389:9
        frame #15: 0x00000001000d3e43 sqllogictest-c1220b23d556cde8`tokio::park::thread::CachedParkThread::block_on::hb4298bb691d4ef9f [inlined] tokio::coop::with_budget::h3bfcea150bbc5a03(budget=(__0 = core::option::Option<> @ 0x00007000020e5158), f={closure#0} @ 0x00007000020e5160) at coop.rs:95:5
        frame #16: 0x00000001000d3e1d sqllogictest-c1220b23d556cde8`tokio::park::thread::CachedParkThread::block_on::hb4298bb691d4ef9f [inlined] tokio::coop::budget::h484828e80d54d2ec(f={closure#0} @ 0x00007000020e5120) at coop.rs:72:5
        frame #17: 0x00000001000d3dd0 sqllogictest-c1220b23d556cde8`tokio::park::thread::CachedParkThread::block_on::hb4298bb691d4ef9f(self=0x00007000020e51a8, f=(__0 = risinglight::db::{impl#0}::shutdown::{async_fn#0} @ 0x00007000020e51b0)) at thread.rs:263:31
        frame #18: 0x00000001000b0b82 sqllogictest-c1220b23d556cde8`tokio::runtime::enter::Enter::block_on::h8c0fd55ffdc235ba(self=0x00007000020e52a0, f=(__0 = risinglight::db::{impl#0}::shutdown::{async_fn#0} @ 0x00007000020e5320)) at enter.rs:151:13
        frame #19: 0x00000001000b9237 sqllogictest-c1220b23d556cde8`tokio::runtime::thread_pool::ThreadPool::block_on::h58dd729f03c21afc(self=0x00007000020e6168, future=(__0 = risinglight::db::{impl#0}::shutdown::{async_fn#0} @ 0x00007000020e54f0)) at mod.rs:73:9
        frame #20: 0x0000000100013bdf sqllogictest-c1220b23d556cde8`tokio::runtime::Runtime::block_on::hb8958b35853d2fb8(self=0x00007000020e6160, future=(__0 = risinglight::db::{impl#0}::shutdown::{async_fn#0} @ 0x00007000020e5650)) at mod.rs:477:43
        frame #21: 0x000000010002cf90 sqllogictest-c1220b23d556cde8`_$LT$sqllogictest..DatabaseWrapper$u20$as$u20$core..ops..drop..Drop$GT$::drop::h187de75571327771(self=0x00007000020e6160) at sqllogictest.rs:87:9
        frame #22: 0x000000010002ba05 sqllogictest-c1220b23d556cde8`core::ptr::drop_in_place$LT$sqllogictest..DatabaseWrapper$GT$::h96d0390da3865fb4((null)=0x00007000020e6160) at mod.rs:188:1
        frame #23: 0x000000010002c4c5 sqllogictest-c1220b23d556cde8`core::ptr::drop_in_place$LT$sqllogictest..runner..Runner$LT$sqllogictest..DatabaseWrapper$GT$$GT$::h278a9721a0fb598e((null)=0x00007000020e6160) at mod.rs:188:1
        frame #24: 0x0000000100057736 sqllogictest-c1220b23d556cde8`sqllogictest::test_disk::h2e49a58218138541(name=(data_ptr = "aggregation.slt", length = 15)) at sqllogictest.rs:60:1
        frame #25: 0x0000000100058024 sqllogictest-c1220b23d556cde8`sqllogictest::run_all_test_files::hd71520ec42fbbe75 at sqllogictest.rs:28:21
        frame #26: 0x0000000100057031 sqllogictest-c1220b23d556cde8`sqllogictest::run_all_test_files::_$u7b$$u7b$closure$u7d$$u7d$::h2249cbc037a4cce7((null)=0x00007000020e6980) at sqllogictest.rs:12:1
        frame #27: 0x0000000100023bf1 sqllogictest-c1220b23d556cde8`core::ops::function::FnOnce::call_once::h1451b5fde5d634c1((null)={closure#0} @ 0x00007000020e6980, (null)=<unavailable>) at function.rs:227:5
        frame #28: 0x0000000100161236 sqllogictest-c1220b23d556cde8`test::__rust_begin_short_backtrace::hb4c6402b861fcbfc [inlined] core::ops::function::FnOnce::call_once::h5c1a4237aa7c6187 at function.rs:227:5 [opt]
        frame #29: 0x0000000100161234 sqllogictest-c1220b23d556cde8`test::__rust_begin_short_backtrace::hb4c6402b861fcbfc at lib.rs:574:5 [opt]
        frame #30: 0x00000001001600a2 sqllogictest-c1220b23d556cde8`test::run_test::run_test_inner::_$u7b$$u7b$closure$u7d$$u7d$::h2e618a46a315d0f3 [inlined] _$LT$alloc..boxed..Box$LT$F$C$A$GT$$u20$as$u20$core..ops..function..FnOnce$LT$Args$GT$$GT$::call_once::h517023a14c7c0439 at boxed.rs:1854:9 [opt]
        frame #31: 0x000000010016009a sqllogictest-c1220b23d556cde8`test::run_test::run_test_inner::_$u7b$$u7b$closure$u7d$$u7d$::h2e618a46a315d0f3 [inlined] _$LT$core..panic..unwind_safe..AssertUnwindSafe$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$$LP$$RP$$GT$$GT$::call_once::hb2ed8711b502df5f at unwind_safe.rs:271:9 [opt]
        frame #32: 0x000000010016009a sqllogictest-c1220b23d556cde8`test::run_test::run_test_inner::_$u7b$$u7b$closure$u7d$$u7d$::h2e618a46a315d0f3 [inlined] std::panicking::try::do_call::hea20152223efc300 at panicking.rs:485:40 [opt]
        frame #33: 0x000000010016009a sqllogictest-c1220b23d556cde8`test::run_test::run_test_inner::_$u7b$$u7b$closure$u7d$$u7d$::h2e618a46a315d0f3 [inlined] std::panicking::try::h76c50381bd628208 at panicking.rs:449:19 [opt]
        frame #34: 0x000000010016009a sqllogictest-c1220b23d556cde8`test::run_test::run_test_inner::_$u7b$$u7b$closure$u7d$$u7d$::h2e618a46a315d0f3 [inlined] std::panic::catch_unwind::hb53e31601f900e57 at panic.rs:136:14 [opt]
        frame #35: 0x000000010016009a sqllogictest-c1220b23d556cde8`test::run_test::run_test_inner::_$u7b$$u7b$closure$u7d$$u7d$::h2e618a46a315d0f3 [inlined] test::run_test_in_process::h5165cfdcce5a67be at lib.rs:597:18 [opt]
        frame #36: 0x0000000100160083 sqllogictest-c1220b23d556cde8`test::run_test::run_test_inner::_$u7b$$u7b$closure$u7d$$u7d$::h2e618a46a315d0f3 at lib.rs:491:39 [opt]
        frame #37: 0x000000010016934a sqllogictest-c1220b23d556cde8`std::sys_common::backtrace::__rust_begin_short_backtrace::h9992f7bce788a185 [inlined] test::run_test::run_test_inner::_$u7b$$u7b$closure$u7d$$u7d$::h613c32f956ac8a8c at lib.rs:518:37 [opt]
        frame #38: 0x0000000100169277 sqllogictest-c1220b23d556cde8`std::sys_common::backtrace::__rust_begin_short_backtrace::h9992f7bce788a185 at backtrace.rs:123:18 [opt]
        frame #39: 0x000000010013647c sqllogictest-c1220b23d556cde8`core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h0989aa2a5960072b [inlined] std::thread::Builder::spawn_unchecked::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::h91df1bd7214faf3a at mod.rs:477:17 [opt]
        frame #40: 0x0000000100136477 sqllogictest-c1220b23d556cde8`core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h0989aa2a5960072b [inlined] _$LT$core..panic..unwind_safe..AssertUnwindSafe$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$$LP$$RP$$GT$$GT$::call_once::he52ef6a74a543637 at unwind_safe.rs:271:9 [opt]
        frame #41: 0x0000000100136477 sqllogictest-c1220b23d556cde8`core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h0989aa2a5960072b [inlined] std::panicking::try::do_call::hddc808a9bfed8b0d at panicking.rs:485:40 [opt]
        frame #42: 0x0000000100136477 sqllogictest-c1220b23d556cde8`core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h0989aa2a5960072b [inlined] std::panicking::try::hd10d15fb8ed0052f at panicking.rs:449:19 [opt]
        frame #43: 0x0000000100136477 sqllogictest-c1220b23d556cde8`core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h0989aa2a5960072b [inlined] std::panic::catch_unwind::h129b76650fd65d22 at panic.rs:136:14 [opt]
        frame #44: 0x0000000100136477 sqllogictest-c1220b23d556cde8`core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h0989aa2a5960072b [inlined] std::thread::Builder::spawn_unchecked::_$u7b$$u7b$closure$u7d$$u7d$::h1a604cf954f80307 at mod.rs:476:30 [opt]
        frame #45: 0x0000000100136426 sqllogictest-c1220b23d556cde8`core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h0989aa2a5960072b at function.rs:227:5 [opt]
        frame #46: 0x0000000100d0bf27 sqllogictest-c1220b23d556cde8`std::sys::unix::thread::Thread::new::thread_start::h683fadd6bcd2ca78 [inlined] _$LT$alloc..boxed..Box$LT$F$C$A$GT$$u20$as$u20$core..ops..function..FnOnce$LT$Args$GT$$GT$::call_once::hee2214394afb1117 at boxed.rs:1854:9 [opt]
        frame #47: 0x0000000100d0bf21 sqllogictest-c1220b23d556cde8`std::sys::unix::thread::Thread::new::thread_start::h683fadd6bcd2ca78 [inlined] _$LT$alloc..boxed..Box$LT$F$C$A$GT$$u20$as$u20$core..ops..function..FnOnce$LT$Args$GT$$GT$::call_once::h07f084f7bbcc925e at boxed.rs:1854:9 [opt]
        frame #48: 0x0000000100d0bf1a sqllogictest-c1220b23d556cde8`std::sys::unix::thread::Thread::new::thread_start::h683fadd6bcd2ca78 at thread.rs:108:17 [opt]
        frame #49: 0x00007ff8170184f4 libsystem_pthread.dylib`_pthread_start + 125
        frame #50: 0x00007ff81701400f libsystem_pthread.dylib`thread_start + 15
    
    opened by BaymaxHWY 10
  • executor: refactor expression framework to return `Arc<ArrayImpl>`

    executor: refactor expression framework to return `Arc`

    When grouping by a key, the group expr will be an InputRef.

    https://github.com/risinglightdb/risinglight/blob/52994366ebcd09047a798d4e452a1989a8568697/src/executor/hash_agg.rs#L31-L33

    https://github.com/risinglightdb/risinglight/blob/f75c99bb274dece4215a4ba0cc1b60ff1ab796b8/src/executor/evaluator.rs#L16

    And evaluating an InputRef will clone the whole Array, which is not efficient.

    As this is a common case to solely evaluate an InputRef, we can optimize this by changing the expression eval return type to Arc<ArrayImpl>.

    enhancement good first issue 
    opened by skyzh 10
  • tests: small change in `tests` folder will cause a full rebuild of binary

    tests: small change in `tests` folder will cause a full rebuild of binary

    Cause by https://github.com/risinglightdb/risinglight/pull/376

    Is there any way that build.rs only detects only file name instead of full file content?

    enhancement good first issue 
    opened by skyzh 9
  • feat(storage): support scan row handler only

    feat(storage): support scan row handler only

    Try to close https://github.com/risinglightdb/risinglight/issues/421, but I'm not sure my solution is right. I split two cases in rowset_iterator:

    1. column_ref has RowHandler and other user columns
    2. column_ref only has RowHandler

    for the first part, I keep the original logic which is RowCount calculated by common_chunk_range for the second part, I add a new condition branch that returns the first column total row_count directly

    Signed-off-by: Fedomn [email protected]

    opened by Fedomn 9
  • Fail to build on macOS.

    Fail to build on macOS.

    Sorry but I can't run cargo build successfully on my Mac💻。

    Env:

    • macOS Big Sur, version 11.5.1
    • rustup: 1.24.3
    • lastest commitID: d89bd5140be75379479e6afff8765c288306a895

    First i use 1.60.0-nightly version to build, then:

    failed to run custom build command for jemalloc-sys v0.3.2

    Full output is HERE


    Then i use 1.58.0-stable version:

    image


    On linux, i use rustc 1.59.0-nightly which is ok. But rustc 1.58.0 isn't, the error is same as macOS's stable version.

    If this issue's format is not correct, i will update it ASAP.🙏

    opened by LimingFang 9
  • refactor(executor): simply drop the futures to cancel a query

    refactor(executor): simply drop the futures to cancel a query

    This PR proposes a new way to do query cancellation: simply drop the futures.

    In this solution, each executor task should be aware that they may be dropped at any time, which means the query is being canceled. To fit this pattern, some behavior related to drop has to be changed:

    • DataChunkBuilders are allowed to drop with remaining rows.
    • Transactions are allowed to drop without explicit commit or abort, and drop will implicitly abort the transaction.
    • All spawned futures have to be canceled by dropping their JoinHandle, or exit actively by closing a channel.

    Compared with the current solution #467, it doesn't use a cancellation token to inform the future and wait for it to exit, which significantly simplifies the code. But due to the lack of support for async-drop, it's not trivial to perform async operations in the cancellation. A possible solution is to spawn the async function or block the thread in the drop function. This PR almost reverts #467, but retains its functionality. @arkbriar Please take a look and see if this looks good to you. 👀

    opened by wangrunji0408 8
  • feat: introduce next-gen planner & optimizer

    feat: introduce next-gen planner & optimizer

    This PR introduces a brand new optimizer based on egg, a powerful crate to build cascades-style optimizers in Rust.

    With egg, we can define a complex rewrite rule using pattern matching in a few lines:

    // predefine join node: (join type condition left right)
    rewrite!("join-reorder";
        "(join ?type ?cond2 (join ?type ?cond1 ?left ?mid) ?right)" =>
        "(join ?type ?cond1 ?left (join ?type ?cond2 ?mid ?right))"
        if columns_is_disjoint("?cond2", "?left")
        // ^ a custom function to test whether the column set of two nodes are disjoint
    ),
    

    As a result, the new optimizer is super small but complete.

    In about 600 lines of code (+ 200 lines for test), it implements the following optimizations:

    • expression simplification
    • constant folding
    • predicate pushdown
    • nested-loop-join -> hash-join
    • join reordering
    • column pruning

    and resolves two annoying problems in the old planner:

    • extracting aggregations from select list
      SELECT sum(a) + b FROM t GROUP BY b;
      => 
      SELECT s + b FROM          # projection
        (SELECT b, sum(a) AS s   # aggregation
         FROM t GROUP BY b);
      
    • converting column references to physical indices (InputRef) and maintaining them during optimization
      =>
      SELECT $1 + $0 FROM 
        (SELECT b, sum(a) FROM t GROUP BY b);
      

    As a comparison, the current planner + optimizer has nearly 4100 lines of code (+ 600 lines for test) with a similar feature set.

    In my opinion, the egg framework is definitely a game changer for building database optimizers. If it proves to work well in RisingLight, we can consider migrating it to RisingWave in the future.

    opened by wangrunji0408 8
  • feat: support TPC-H Q9

    feat: support TPC-H Q9

    With subquery support in #756, we are able to challenge more TPC-H queries. As an example, this PR adds support for TPC-H Q9.

    Changes:

    • support like operator
    • support extract(year from xx) function
    • update sqlparser-rs version to 0.30 (for derivingOrd)
    • add TPC-H Q9 to test

    However, the speed for this query is ridiculously slow. (104s vs DuckDB <1s) We should investigate and optimize it in the future.

    opened by wangrunji0408 0
  • feat(storage): compact rowset & DV manifest in bootstrap

    feat(storage): compact rowset & DV manifest in bootstrap

    Signed-off-by: unconsolable [email protected]

    close #739

    What's changed:

    • Rewrite effective AddRowset & AddDV with CreateTable & DropTable to temp manifest, then rename the temp manifest and reopen.
    • Split commit_changes in order to support different manifest.
    opened by unconsolable 0
  • feat(executor): bring back internal table scan executor to v2

    feat(executor): bring back internal table scan executor to v2

    close #743

    What's changed:

    • Check whether the table is internal table in Binder
    • Add Internal enum in planner Node
    • Add InternalTableExecutor in executor v2
    • Update contributors table
    • Test internal table in integration test
    opened by unconsolable 0
  • sql: support subquery

    sql: support subquery

    Step 1: support subquery binding in binder.

    Existing binder can only bind columns and tables in the catalog.

    One possbile solution is to add new types of column and table bindings: SubqueryColumnRef and SubQueryTableRef.

    Step 2: support uncorrlated subquery execution.

    Step 3: support subquery execution plan for correlated subquery.

    Reference: https://ericfu.me/subquery-optimization/

    opened by MingjiHan99 2
Releases(v0.2.0)
  • v0.2.0(Dec 20, 2022)

    After 9 months' development, we are happy to announce a new version of RisingLight. Major changes in this version:

    • New cascades-style binder / planner / optimizer framework powered by egg.
    • New SIMD expression evaluation design with better performance.
    • More efficient storage with better encoding and predicate push-downs.
    • Better docs on the storage layer.

    Thanks for your support!

    What's Changed

    • docs: migrate to new Slack community by @skyzh in https://github.com/risinglightdb/risinglight/pull/606
    • docs: add architecture overview by @skyzh in https://github.com/risinglightdb/risinglight/pull/609
    • feat(executor): introduce DataChunkBuilder and split chunks in TopN by @wangqiim in https://github.com/risinglightdb/risinglight/pull/610
    • deps: upgrade prost 0.10 by @alissa-tung in https://github.com/risinglightdb/risinglight/pull/613
    • feat(storage): record first_key in block_index_builder by @adlternative in https://github.com/risinglightdb/risinglight/pull/598
    • feat(executor): introduce DataChunkBuilder and split chunks in Order … by @wangqiim in https://github.com/risinglightdb/risinglight/pull/612
    • chore(ci): install protoc by direct download by @skyzh in https://github.com/risinglightdb/risinglight/pull/614
    • feat(executor): implement SortMergeJoin executor by @D2Lark in https://github.com/risinglightdb/risinglight/pull/600
    • chore(test): add more test case by @D2Lark in https://github.com/risinglightdb/risinglight/pull/616
    • docs: add instructions to install protobuf by @skyzh in https://github.com/risinglightdb/risinglight/pull/617
    • docs: add badges of dbdb.io, crates.io and docs.rs by @skyzh in https://github.com/risinglightdb/risinglight/pull/621
    • feat(storage): add support composite sort key in MergeIterator by @BaymaxHWY in https://github.com/risinglightdb/risinglight/pull/622
    • executor: use DataChunkbuilder to refactor ValuesExecutor by @JayiceZ in https://github.com/risinglightdb/risinglight/pull/623
    • build: bump toolchain and deps, remove unused dep by @TennyZhuang in https://github.com/risinglightdb/risinglight/pull/629
    • fix: make header correct when using group by by @shmiwy in https://github.com/risinglightdb/risinglight/pull/624
    • refactor(planner): use AggInputRefResolver to handle group by expr by @Fedomn in https://github.com/risinglightdb/risinglight/pull/630
    • feat(binder): support “primary key (a, b)” syntax by @shmiwy in https://github.com/risinglightdb/risinglight/pull/631
    • feat: support multi ordered primary key by @shmiwy in https://github.com/risinglightdb/risinglight/pull/633
    • community: add xxchan as maintainer by @skyzh in https://github.com/risinglightdb/risinglight/pull/634
    • docs: add overview of storage by @skyzh in https://github.com/risinglightdb/risinglight/pull/635
    • refactor(executor): refactor CopyFromFile using DataChunkBuilder by @noneback in https://github.com/risinglightdb/risinglight/pull/637
    • fix(planner): enhance group by illegal column validation by @Fedomn in https://github.com/risinglightdb/risinglight/pull/642
    • feat: use ref-cast for BlobRef cast by @Kikkon in https://github.com/risinglightdb/risinglight/pull/643
    • feat(storage): support range-filter scan by sort key by @shmiwy in https://github.com/risinglightdb/risinglight/pull/644
    • feat(optimizer): push the filter down below the agg by @lokax in https://github.com/risinglightdb/risinglight/pull/648
    • binder: primary key should by-default be non-null by @Ted-Jiang in https://github.com/risinglightdb/risinglight/pull/649
    • chore: remove Mutex in database/schema/table catalog by @chowc in https://github.com/risinglightdb/risinglight/pull/650
    • feat: support sort agg by @Kikkon in https://github.com/risinglightdb/risinglight/pull/646
    • fix: typo and clippy warnings by @yuzi-neko in https://github.com/risinglightdb/risinglight/pull/652
    • feat(binder): support Having clause and more flexible OrderBy by @lokax in https://github.com/risinglightdb/risinglight/pull/651
    • chore(sqllogictest): use libtest-mimic as test harness by @skyzh in https://github.com/risinglightdb/risinglight/pull/656
    • chore(test): ensure single thread runtime for sqllogictest by @skyzh in https://github.com/risinglightdb/risinglight/pull/657
    • feat(test): add sqlplannertest by @skyzh in https://github.com/risinglightdb/risinglight/pull/661
    • feat(cli): support multi-line interactive mode by @Gun9niR in https://github.com/risinglightdb/risinglight/pull/662
    • chore: upgrade dependencies by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/663
    • fix: 'unsupported command' everywhere by @cadl in https://github.com/risinglightdb/risinglight/pull/664
    • fix: typo by @GoGim1 in https://github.com/risinglightdb/risinglight/pull/665
    • feat(storage): use variable size encoding to compress rle count by @xinchengxx in https://github.com/risinglightdb/risinglight/pull/666
    • fix: create table with invalid primary keys constraints by @GoGim1 in https://github.com/risinglightdb/risinglight/pull/667
    • chore: bump dependencies by @skyzh in https://github.com/risinglightdb/risinglight/pull/672
    • docs: add logo for RisingLight by @skyzh in https://github.com/risinglightdb/risinglight/pull/671
    • fix: append NULLs when inserting value with incomplete columns by @GoGim1 in https://github.com/risinglightdb/risinglight/pull/673
    • feat(storage): support dict encoding by @Kikkon in https://github.com/risinglightdb/risinglight/pull/668
    • feat(optimizer): support column pruning for some operators by @lokax in https://github.com/risinglightdb/risinglight/pull/653
    • fix(storage): reserve correct size by @lokax in https://github.com/risinglightdb/risinglight/pull/678
    • chore: bump dependencies, toolchain, and adapt to new sqlparser by @skyzh in https://github.com/risinglightdb/risinglight/pull/681
    • chore: add github codespace devcontainer configuration by @yeya24 in https://github.com/risinglightdb/risinglight/pull/680
    • refactor: refactor risinglight-sqllogictest by @xxchan in https://github.com/risinglightdb/risinglight/pull/682
    • refactor: remove unnecessary current dir by @xxchan in https://github.com/risinglightdb/risinglight/pull/683
    • storage: use Arc during pin and unpin by @chaixuqing in https://github.com/risinglightdb/risinglight/pull/685
    • chore(storage): select compaction strategy using statistics by @chaixuqing in https://github.com/risinglightdb/risinglight/pull/689
    • feat(planner): plan select distinct by @lokax in https://github.com/risinglightdb/risinglight/pull/686
    • feat(executor): support perfect hash aggregate by @lokax in https://github.com/risinglightdb/risinglight/pull/690
    • fix: add row_handler to schema by @yinfredyue in https://github.com/risinglightdb/risinglight/pull/692
    • chore: bump toolchain and update dependencies by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/695
    • feat: introduce ordered float by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/699
    • feat(storage): support dict encoding in primitive column builder by @Kikkon in https://github.com/risinglightdb/risinglight/pull/701
    • feat: make binary operations auto-vectorized by @lokax in https://github.com/risinglightdb/risinglight/pull/700
    • feat: introduce next-gen planner & optimizer by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/702
    • feat(binder): introduce egg binder for queries by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/705
    • fix(storage): checksum BlockType in block header by @unconsolable in https://github.com/risinglightdb/risinglight/pull/704
    • feat(planner): support distinct on by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/706
    • refactor(type): unify DataTypeKind by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/708
    • feat(storage): generic nullable block encoding by @unconsolable in https://github.com/risinglightdb/risinglight/pull/709
    • feat(binder): egg binder for drop statement by @eliasyaoyc in https://github.com/risinglightdb/risinglight/pull/711
    • feat(planner_v2): add type checker by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/717
    • refactor(storage): replace primitive nullable encoding with generic way by @unconsolable in https://github.com/risinglightdb/risinglight/pull/713
    • feat(binder): new binder for copy, delete and create_table by @eliasyaoyc in https://github.com/risinglightdb/risinglight/pull/719
    • fix(type): add NULL type and fix type analysis by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/721
    • feat(planner_v2): support explain by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/722
    • refactor(executor): simply drop the futures to cancel a query by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/720
    • feat(planner_v2): cost function and multi-stage optimization by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/723
    • feat: introduce executor v2 for the new planner by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/725
    • feat(planner_v2): support standalone VALUES clause by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/726
    • feat(storage): support NULL on blob and char columns by @unconsolable in https://github.com/risinglightdb/risinglight/pull/724
    • refactor(fetch size): add fast return and compare ROWSET MAX OUTPUT by @eliasyaoyc in https://github.com/risinglightdb/risinglight/pull/716
    • feat(executor_v2): migrate executors to run TPCH by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/727
    • feat(planner_v2): pass all sqllogictests by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/728
    • chore: enable query engine v2 by default by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/729
    • feat(rt): support tokio-console by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/730
    • fix(perf): fix performance regression in HashJoin & HashAgg by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/731
    • chore: bump toolchain and apply async-fn-in-trait by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/732
    • chore(ci): remove bench workflow by @skyzh in https://github.com/risinglightdb/risinglight/pull/734
    • build: bump deps by @TennyZhuang in https://github.com/risinglightdb/risinglight/pull/735
    • doc: Storage basics documentation by @yinfredyue in https://github.com/risinglightdb/risinglight/pull/738
    • fix(storage): compaction type error by @yinfredyue in https://github.com/risinglightdb/risinglight/pull/737
    • chore: bump sqllogictest to 0.9.0 by @xxchan in https://github.com/risinglightdb/risinglight/pull/736
    • feat(storage): Dict encoding for compaction by @yinfredyue in https://github.com/risinglightdb/risinglight/pull/740
    • perf(expr): apply auto-vectorization and remove explicit SIMDs by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/741
    • release: v0.2 by @skyzh in https://github.com/risinglightdb/risinglight/pull/742
    • perf(expr): further optimize performance by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/744

    New Contributors

    • @wangqiim made their first contribution in https://github.com/risinglightdb/risinglight/pull/610
    • @JayiceZ made their first contribution in https://github.com/risinglightdb/risinglight/pull/623
    • @shmiwy made their first contribution in https://github.com/risinglightdb/risinglight/pull/624
    • @noneback made their first contribution in https://github.com/risinglightdb/risinglight/pull/637
    • @Kikkon made their first contribution in https://github.com/risinglightdb/risinglight/pull/643
    • @lokax made their first contribution in https://github.com/risinglightdb/risinglight/pull/648
    • @Ted-Jiang made their first contribution in https://github.com/risinglightdb/risinglight/pull/649
    • @chowc made their first contribution in https://github.com/risinglightdb/risinglight/pull/650
    • @yuzi-neko made their first contribution in https://github.com/risinglightdb/risinglight/pull/652
    • @Gun9niR made their first contribution in https://github.com/risinglightdb/risinglight/pull/662
    • @cadl made their first contribution in https://github.com/risinglightdb/risinglight/pull/664
    • @GoGim1 made their first contribution in https://github.com/risinglightdb/risinglight/pull/665
    • @xinchengxx made their first contribution in https://github.com/risinglightdb/risinglight/pull/666
    • @yeya24 made their first contribution in https://github.com/risinglightdb/risinglight/pull/680
    • @chaixuqing made their first contribution in https://github.com/risinglightdb/risinglight/pull/685
    • @yinfredyue made their first contribution in https://github.com/risinglightdb/risinglight/pull/692
    • @unconsolable made their first contribution in https://github.com/risinglightdb/risinglight/pull/704
    • @eliasyaoyc made their first contribution in https://github.com/risinglightdb/risinglight/pull/711

    Full Changelog: https://github.com/risinglightdb/risinglight/compare/v0.1.3...v0.2.0

    Source code(tar.gz)
    Source code(zip)
  • v0.1.3(Apr 4, 2022)

    RisingLight is finally available as a crate on crates.io! There're a lot of bug fixes and new small features in v0.1.3.

    What's Changed

    • feat: map filter inputref by @XieJiann in https://github.com/risinglightdb/risinglight/pull/548
    • fix(storage): delete RowSets when drop table by @BaymaxHWY in https://github.com/risinglightdb/risinglight/pull/555
    • chore(storage): use get_or_try_insert_with for block cache by @BaymaxHWY in https://github.com/risinglightdb/risinglight/pull/556
    • feat(array): improve 15x performance by @sundy-li in https://github.com/risinglightdb/risinglight/pull/554
    • chore(storage): remove TODO comment by @BaymaxHWY in https://github.com/risinglightdb/risinglight/pull/557
    • fix(executor): Char and Varchar's length limit not respected by @xiaoyong-z in https://github.com/risinglightdb/risinglight/pull/558
    • chore: remove header in DataChunk. by @RinChanNOWWW in https://github.com/risinglightdb/risinglight/pull/560
    • fix(executor): output no chunks from dummy by @skyzh in https://github.com/risinglightdb/risinglight/pull/561
    • feat(tracing): add minitrace to RisingLight by @WindowsXp-Beta in https://github.com/risinglightdb/risinglight/pull/550
    • test: do not detect tests in build.rs by @xxchan in https://github.com/risinglightdb/risinglight/pull/564
    • binder: plan not optimal for count(*) with filter by @xiaoyong-z in https://github.com/risinglightdb/risinglight/pull/559
    • feat(ci): parallism test by @skyzh in https://github.com/risinglightdb/risinglight/pull/568
    • fix(storage): ignore duplicated deletion by @skyzh in https://github.com/risinglightdb/risinglight/pull/569
    • fix(ci): sqllogictest not running by @skyzh in https://github.com/risinglightdb/risinglight/pull/570
    • chore(storage) improve flush logging by @kwannoel in https://github.com/risinglightdb/risinglight/pull/571
    • docs: update roadmap issue by @skyzh in https://github.com/risinglightdb/risinglight/pull/573
    • chore: use published crates by @xxchan in https://github.com/risinglightdb/risinglight/pull/575
    • release: bump to v0.1.1 by @skyzh in https://github.com/risinglightdb/risinglight/pull/576
    • feat(array) introduce DataChunkBuilder and split chunks in NestedLoop… by @BaymaxHWY in https://github.com/risinglightdb/risinglight/pull/567
    • refactor(executor): refactor ArrayImpl::Bool for cheap cloning by @kwannoel in https://github.com/risinglightdb/risinglight/pull/577
    • refactor(array): cheap clone for all arrays by @skyzh in https://github.com/risinglightdb/risinglight/pull/579
    • feat(function): add function definition by @MingjiHan99 in https://github.com/risinglightdb/risinglight/pull/581
    • chore: bump rust toolchain to 2022-03-09 by @skyzh in https://github.com/risinglightdb/risinglight/pull/583
    • refactor(storage): remove Arc from Arc by @kwannoel in https://github.com/risinglightdb/risinglight/pull/585
    • feat(tracing): make minitrace a cli option by @D2Lark in https://github.com/risinglightdb/risinglight/pull/586
    • chore(tracing): remove enable_tracing option from db interface by @skyzh in https://github.com/risinglightdb/risinglight/pull/587
    • feat(storage): report statistics after finishing table scan (#474) by @adlternative in https://github.com/risinglightdb/risinglight/pull/594
    • chore: bump toolchain and adapt to new portable simd API by @Y7n05h in https://github.com/risinglightdb/risinglight/pull/595
    • feat(executor):optimize NestedLoopJoin's memory usage by @BaymaxHWY in https://github.com/risinglightdb/risinglight/pull/599
    • chore: switch sqlparser-rs to crates.io version by @wangrunji0408 in https://github.com/risinglightdb/risinglight/pull/602
    • chore: bump to v0.1.3 by @skyzh in https://github.com/risinglightdb/risinglight/pull/603
    • chore: update contributors by @skyzh in https://github.com/risinglightdb/risinglight/pull/605

    New Contributors

    • @XieJiann made their first contribution in https://github.com/risinglightdb/risinglight/pull/548
    • @BaymaxHWY made their first contribution in https://github.com/risinglightdb/risinglight/pull/555
    • @sundy-li made their first contribution in https://github.com/risinglightdb/risinglight/pull/554
    • @RinChanNOWWW made their first contribution in https://github.com/risinglightdb/risinglight/pull/560
    • @kwannoel made their first contribution in https://github.com/risinglightdb/risinglight/pull/571
    • @D2Lark made their first contribution in https://github.com/risinglightdb/risinglight/pull/586
    • @adlternative made their first contribution in https://github.com/risinglightdb/risinglight/pull/594
    • @Y7n05h made their first contribution in https://github.com/risinglightdb/risinglight/pull/595

    Full Changelog: https://github.com/risinglightdb/risinglight/compare/v0.1...v0.1.3

    Thanks all for your contributions!

    > select * from pg_catalog.contributors
    +----------------+
    | github_id      |
    +----------------+
    | BaymaxHWY      |
    | D2Lark         |
    | Fedomn         |
    | LiuYuHui       |
    | MingjiHan99    |
    | PsiACE         |
    | RinChanNOWWW   |
    | Sunt-ing       |
    | TennyZhuang    |
    | WindowsXp-Beta |
    | Y7n05h         |
    | adlternative   |
    | alissa-tung    |
    | arkbriar       |
    | kwannoel       |
    | likg227        |
    | ludics         |
    | nanderstabel   |
    | pleiadesian    |
    | rapiz1         |
    | skyzh          |
    | st1page        |
    | sundy-li       |
    | tabVersion     |
    | wangrunji0408  |
    | xiaoyong-z     |
    | xxchan         |
    | yingjunwu      |
    | zehaowei       |
    | zzl200012      |
    +----------------+
    
    Source code(tar.gz)
    Source code(zip)
  • v0.1(Mar 3, 2022)

    After about half a year's development, we finally release RisingLight v0.1. RisingLight is an embed database, with an interactive shell built-in, and supports running a few TPC-H queries.

    > select * from pg_catalog.contributors
    +----------------+
    | github_id      |
    +----------------+
    | Fedomn         |
    | LiuYuHui       |
    | MingjiHan99    |
    | PsiACE         |
    | Sunt-ing       |
    | TennyZhuang    |
    | WindowsXp-Beta |
    | alissa-tung    |
    | arkbriar       |
    | likg227        |
    | ludics         |
    | nanderstabel   |
    | pleiadesian    |
    | rapiz1         |
    | skyzh          |
    | st1page        |
    | tabVersion     |
    | wangrunji0408  |
    | xiaoyong-z     |
    | xxchan         |
    | yingjunwu      |
    | zehaowei       |
    | zzl200012      |
    +----------------+
    
    Source code(tar.gz)
    Source code(zip)
Owner
The RisingLight Project
RisingLight is an OLAP database system for educational purpose.
The RisingLight Project
CRUD system of book-management with ORM and JWT for educational purposes.

Book management English | 中文 Required Rust MySQL 5.7 Usage Execute init.sql to create tables. Set environment variable DATABASE_URL and JWT_SECRET in

null 32 Dec 28, 2022
ReefDB is a minimalistic, in-memory and on-disk database management system written in Rust, implementing basic SQL query capabilities and full-text search.

ReefDB ReefDB is a minimalistic, in-memory and on-disk database management system written in Rust, implementing basic SQL query capabilities and full-

Sacha Arbonel 75 Jun 12, 2023
Experimental blockchain database

A database for the blockchain. Design considerations API The database is a universal key-value storage that supports transactions. It does not support

Parity Technologies 172 Dec 26, 2022
Immutable Ordered Key-Value Database Engine

PumpkinDB Build status (Linux) Build status (Windows) Project status Usable, between alpha and beta Production-readiness Depends on your risk toleranc

null 1.3k Jan 2, 2023
Skybase is an extremely fast, secure and reliable real-time NoSQL database with automated snapshots and SSL

Skybase The next-generation NoSQL database What is Skybase? Skybase (or SkybaseDB/SDB) is an effort to provide the best of key/value stores, document

Skybase 1.4k Dec 29, 2022
Distributed transactional key-value database, originally created to complement TiDB

Website | Documentation | Community Chat TiKV is an open-source, distributed, and transactional key-value database. Unlike other traditional NoSQL sys

TiKV Project 12.4k Jan 3, 2023
small distributed database protocol

clepsydra Overview This is a work-in-progress implementation of a core protocol for a minimalist distributed database. It strives to be as small and s

Graydon Hoare 19 Dec 2, 2021
A user crud written in Rust, designed to connect to a MySQL database with full integration test coverage.

SQLX User CRUD Purpose This application demonstrates the how to implement a common design for CRUDs in, potentially, a system of microservices. The de

null 78 Nov 27, 2022
Rust version of the Haskell ERD tool. Translates a plain text description of a relational database schema to dot files representing an entity relation diagram.

erd-rs Rust CLI tool for creating entity-relationship diagrams from plain text markup. Based on erd (uses the same input format and output rendering).

Dave Challis 32 Jul 25, 2022
AgateDB is an embeddable, persistent and fast key-value (KV) database written in pure Rust

AgateDB is an embeddable, persistent and fast key-value (KV) database written in pure Rust. It is designed as an experimental engine for the TiKV project, and will bring aggressive optimizations for TiKV specifically.

TiKV Project 535 Jan 9, 2023
A programmable document database inspired by CouchDB written in Rust

PliantDB PliantDB aims to be a Rust-written, ACID-compliant, document-database inspired by CouchDB. While it is inspired by CouchDB, this project will

Khonsu Labs 718 Dec 31, 2022
🐸Slippi DB ingests Slippi replays and puts the data into a SQLite database for easier parsing.

The primary goal of this project is to make it easier to analyze large amounts of Slippi data. Its end goal is to create something similar to Ballchasing.com but for Melee.

Max Timkovich 20 Jan 2, 2023
A cross-platform terminal database tool written in Rust

gobang is currently in alpha A cross-platform terminal database tool written in Rust Features Cross-platform support (macOS, Windows, Linux) Mu

Takayuki Maeda 2.1k Jan 5, 2023
Pure rust embeddable key-value store database.

MHdb is a pure Rust database implementation, based on dbm. See crate documentation. Changelog v1.0.3 Update Cargo.toml v1.0.2 Update Cargo.toml v1.0.1

Magnus Hirth 7 Dec 10, 2022
influxdb provides an asynchronous Rust interface to an InfluxDB database.

influxdb influxdb provides an asynchronous Rust interface to an InfluxDB database. This crate supports insertion of strings already in the InfluxDB Li

null 9 Feb 16, 2021
Yet Another Kev-Value DataBase

Yet Another Kev-Value DataBase Extremely simple (simplest possible?) single-file BTree-based key-value database. Build for fun and learning: goal is t

Sergey Melnychuk 18 May 23, 2022
Skytable is an extremely fast, secure and reliable real-time NoSQL database with automated snapshots and TLS

Skytable is an effort to provide the best of key/value stores, document stores and columnar databases, that is, simplicity, flexibility and queryability at scale. The name 'Skytable' exemplifies our vision to create a database that has limitless possibilities. Skytable was previously known as TerrabaseDB (and then Skybase) and is also nicknamed "STable", "Sky" and "SDB" by the community.

Skytable 1.4k Dec 29, 2022
RefineDB - A strongly-typed document database that runs on any transactional key-value store.

RefineDB - A strongly-typed document database that runs on any transactional key-value store.

Heyang Zhou 375 Jan 4, 2023
FeOphant - A SQL database server written in Rust and inspired by PostreSQL.

A PostgreSQL inspired SQL database written in Rust.

Christopher Hotchkiss 27 Dec 7, 2022