OBKV Table Client is Rust Library that can be used to access table data from OceanBase storage layer.

Overview

obkv-table-client-rs

License

OBKV Table Client is Rust Library that can be used to access table data from OceanBase storage layer. Its access method is different from JDBC, it skips the SQL parsing layer, so it has significant performance advantage.

Acknowledgment

CeresMeta refers to obkv-table-client-java, thanks to the OceanBase team.

Contributing

Any contribution is welcome!

Read our Contributing Guide and make your first contribution!

Licensing

obkv-table-client-rs is under Apache License 2.0.

You might also like...
This code features a viper-client, which can connect to a viper-server, a custom interface made for Comelit devices.

Viper Client 👷 (WIP) This is code for my intercom; specifically for the Comelit Mini Wi-Fi MSFV. This features a ViperClient which can talk to the Co

rust_arango enables you to connect with ArangoDB server, access to database, execute AQL query, manage ArangoDB in an easy and intuitive way, both async and plain synchronous code with any HTTP ecosystem you love.

rust_arango enables you to connect with ArangoDB server, access to database, execute AQL query, manage ArangoDB in an easy and intuitive way, both async and plain synchronous code with any HTTP ecosystem you love.

Appendable and iterable key/list storage, backed by S3, written in rust

klstore Appendable and iterable key/list storage, backed by S3. General Overview Per key, a single writer appends to underlying storage, enabling many

A mini kv database demo that using simplified bitcask storage model with rust implementation

A mini kv database demo that using simplified bitcask storage model with rust implementation.

An LSM storage engine designed to significantly reduce I/O amplification written in safe rust (Under active development)
An LSM storage engine designed to significantly reduce I/O amplification written in safe rust (Under active development)

VelarixDB is an LSM-based storage engine designed to significantly reduce IO amplification, resulting in better performance and durability for storage

ForestDB - A Fast Key-Value Storage Engine Based on Hierarchical B+-Tree Trie

ForestDB is a key-value storage engine developed by Couchbase Caching and Storage Team, and its main index structure is built from Hierarchic

Forage is for Storage
Forage is for Storage

Forage Forage is for Storage Remote storage: Open storage channels to a remote storage provider over Tor Lightweight: Platform-optimized using Blake3-

Routing - specialised storage DHT

PLEASE NOTE THAT THIS REPOSITORY HAS NOW BEEN ARCHIVED All routing development is now via the safe_network repository sn_routing sn_routing - a specia

Distributed, version controlled, SQL database with cryptographically verifiable storage, queries and results. Think git for postgres.

SDB - SignatureDB Distributed, version controlled, SQL database with cryptographically verifiable storage, queries and results. Think git for postgres

Comments
  • Build fail on arm64 platform

    Build fail on arm64 platform

    Describe this problem

    Build obkv fails on my MacBook [MacBook Pro (13-inch, M1, 2020)]

    Steps to reproduce

    cargo build and then I will get the compile error

    opened by archerny 2
  • fix: fix load table entry bug

    fix: fix load table entry bug

    Fix following error.

    2022-11-01 10:31:59.444 INFO [/home/xikai.wxk/.cargo/git/checkouts/obkv-table-client-rs-4fa64c39e1be7389/318907f/src/location/mod.rs:561] ObTableLocation::get_or_create_mysql_pool create mysql pool server xx port 2881 db_name oceanbase.
    2022-11-01 10:31:59.454 ERRO [/home/xikai.wxk/.cargo/git/checkouts/obkv-table-client-rs-4fa64c39e1be7389/318907f/src/location/mod.rs:858] ObTableLocation::get_table_entry_from_remote: fail to do mysql row conversion, err:Couldn't convert the row `Row { partition_id: Bytes("0"), svr_ip: Bytes("1xx."), sql_port: Bytes("2881"), table_id: Bytes("xx.."), role: Bytes("1"), replica_num: Bytes("3"), part_num: Bytes("1"), svr_port: Bytes("2882"), status: Bytes("active"), stop_time: Bytes("0") }` to a desired type
    2022-11-01 10:31:59.590 ERRO [common_util/src/panic.rs:42] thread 'main' panicked 'Failed to setup analytic engine: OpenObkv { source: InitClient { full_user_name: "xx", source: Common(ConvertFailed, "mysql row conversion err:Couldn't convert the row `Row { partition_id: Bytes(\"0\"), svr_ip: Bytes(\"xx..\"), sql_port: Bytes(\"2881\"), table_id: Bytes(\"xx..\"), role: Bytes(\"1\"), replica_num: Bytes(\"3\"), part_num: Bytes(\"1\"), svr_port: Bytes(\"2882\"), status: Bytes(\"active\"), stop_time: Bytes(\"0\") }` to a desired type"), backtrace: Backtrace(   0: <snafu::backtrace_shim::Backtrace as snafu::GenerateBacktrace>::generate
                 at /home/xikai.wxk/code/ceresdb/components/table_kv/src/obkv.rs:23:17
          <table_kv::obkv::InitClient<__T0> as snafu::IntoError<table_kv::obkv::Error>>::into_error
                 at /home/xikai.wxk/code/ceresdb/components/table_kv/src/obkv.rs:23:17
          <core::result::Result<T,E> as snafu::ResultExt<T,E>>::context::{{closure}}
                 at /home/xikai.wxk/.cargo/registry/src/github.com-1ecc6299db9ec823/snafu-0.6.10/src/lib.rs:318:30
          core::result::Result<T,E>::map_err
                 at /rustc/d394408fb38c4de61f765a3ed5189d2731a1da91/library/core/src/result.rs:855:27
          <core::result::Result<T,E> as snafu::ResultExt<T,E>>::context
                 at /home/xikai.wxk/.cargo/registry/src/github.com-1ecc6299db9ec823/snafu-0.6.10/src/lib.rs:318:9
          table_kv::obkv::ObkvImpl::new
                 at /home/xikai.wxk/code/ceresdb/components/table_kv/src/obkv.rs:315:9
       1: <analytic_engine::setup::ReplicatedEngineBuilder as analytic_engine::setup::EngineBuilder>::open_wal_and_manifest::{{closure}}::{{closure}}
                 at /home/xikai.wxk/code/ceresdb/analytic_engine/src/setup.rs:148:37
          <tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll
                 at /home/xikai.wxk/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.20.1/src/runtime/blocking/task.rs:42:21
       2: tokio::runtime::task::core::CoreStage<T>::poll::{{closure}}
                 at /home/xikai.wxk/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.20.1/src/runtime/task/core.rs:165:17
          tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut
                 at /home/xikai.wxk/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.20.1/src/loom/std/unsafe_cell.rs:14:9
          tokio::runtime::task::core::CoreStage<T>::poll
                 at /home/xikai.wxk/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.20.1/src/runtime/task/core.rs:155:13
          tokio::runtime::task::harness::poll_future::{{closure}}
                 at /home/xikai.wxk/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.20.1/src/runtime/task/harness.rs:480:19
          <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
                 at /rustc/d394408fb38c4de61f765a3ed5189d2731a1da91/library/core/src/panic/unwind_safe.rs:271:9
       3: std::panicking::try::do_call
                 at /rustc/d394408fb38c4de61f765a3ed5189d2731a1da91/library/std/src/panicking.rs:492:40
          std::panicking::try
                 at /rustc/d394408fb38c4de61f765a3ed5189d2731a1da91/library/std/src/panicking.rs:456:19
          std::panic::catch_unwind
                 at /rustc/d394408fb38c4de61f765a3ed5189d2731a1da91/library/std/src/panic.rs:137:14
          tokio::runtime::task::harness::poll_future
                 at /home/xikai.wxk/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.20.1/src/runtime/task/harness.rs:468:18
          tokio::runtime::task::harness::Harness<T,S>::poll_inner
                 at /home/xikai.wxk/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.20.1/src/runtime/task/harness.rs:104:27
          tokio::runtime::task::harness::Harness<T,S>::poll
                 at /home/xikai.wxk/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.20.1/src/runtime/task/harness.rs:57:15
       4: tokio::runtime::task::raw::RawTask::poll
    
    opened by chunshao90 0
  • obkv-table-client-rs 驱动 运行报错

    obkv-table-client-rs 驱动 运行报错

    场景:

    observer、ob-configserver部署成功,且使用obkv-table-client-java测试正常。obkv-table-client-rs的demo编译正常,运行报错。

    报错信息:

    frank@LAPTOP-4OF1323N:~/ob/obkv/obkv_cli$ cargo run
        Finished dev [unoptimized + debuginfo] target(s) in 0.21s
         Running `target/debug/obkv_cli`
    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: MySqlError { ERROR 1193 (HY000): Unknown system variable 'socket' }', /home/frank/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/mysql-16.1.0/src/conn/mod.rs:1760:61
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    

    详细报错信息:

    
    frank@LAPTOP-4OF1323N:~/ob/obkv/obkv_cli$ RUST_BACKTRACE=full cargo run
        Finished dev [unoptimized + debuginfo] target(s) in 0.69s
         Running `target/debug/obkv_cli`
    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: MySqlError { ERROR 1193 (HY000): Unknown system variable 'socket' }', /home/frank/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/mysql-16.1.0/src/conn/mod.rs:1760:61
    stack backtrace:
       0:     0x560e07436cc0 - std::backtrace_rs::backtrace::libunwind::trace::h32eb3e08e874dd27
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
       1:     0x560e07436cc0 - std::backtrace_rs::backtrace::trace_unsynchronized::haa3f451d27bc11a5
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
       2:     0x560e07436cc0 - std::sys_common::backtrace::_print_fmt::h5b94a01bb4289bb5
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/sys_common/backtrace.rs:66:5
       3:     0x560e07436cc0 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hb070b7fa7e3175df
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/sys_common/backtrace.rs:45:22
       4:     0x560e0745a42e - core::fmt::write::hd5207aebbb9a86e9
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/fmt/mod.rs:1202:17
       5:     0x560e07430b95 - std::io::Write::write_fmt::h3bd699bbd129ab8a
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/io/mod.rs:1679:15
       6:     0x560e074384f3 - std::sys_common::backtrace::_print::h7a21be552fdf58da
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/sys_common/backtrace.rs:48:5
       7:     0x560e074384f3 - std::sys_common::backtrace::print::ha85c41fe4dd80b13
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/sys_common/backtrace.rs:35:9
       8:     0x560e074384f3 - std::panicking::default_hook::{{closure}}::h04cca40023d0eeca
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:295:22
       9:     0x560e074381df - std::panicking::default_hook::haa3ca8c310ed5402
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:314:9
      10:     0x560e07438b9a - std::panicking::rust_panic_with_hook::h7b190ce1a948faac
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:698:17
      11:     0x560e07438a97 - std::panicking::begin_panic_handler::{{closure}}::hbafbfdc3e1b97f68
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:588:13
      12:     0x560e0743716c - std::sys_common::backtrace::__rust_end_short_backtrace::hda93e5fef243b4c0
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/sys_common/backtrace.rs:138:18
      13:     0x560e074387b2 - rust_begin_unwind
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:584:5
      14:     0x560e069f72d3 - core::panicking::panic_fmt::h8d17ca1073d9a733
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/panicking.rs:142:14
      15:     0x560e069f7423 - core::result::unwrap_failed::hfaddf24b248137d3
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/result.rs:1785:5
      16:     0x560e070f868b - core::result::Result<T,E>::unwrap::hd6ca67c4717efe46
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/result.rs:1107:23
      17:     0x560e07107801 - mysql::conn::Conn::get_system_var::h266a2955a72cb6a1
                                   at /home/frank/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/mysql-16.1.0/src/conn/mod.rs:1760:20
      18:     0x560e070fd2ce - mysql::conn::Conn::can_improved::h9ce62211aa045e11
                                   at /home/frank/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/mysql-16.1.0/src/conn/mod.rs:713:26
      19:     0x560e070fd86f - mysql::conn::Conn::new::h204349fa80266ed3
                                   at /home/frank/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/mysql-16.1.0/src/conn/mod.rs:734:37
      20:     0x560e0711e8ce - mysql::conn::pool::InnerPool::new_conn::hcc71942bbf27d52a
                                   at /home/frank/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/mysql-16.1.0/src/conn/pool.rs:43:15
      21:     0x560e0711e761 - mysql::conn::pool::InnerPool::new::h2984a33ddecf7061
                                   at /home/frank/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/mysql-16.1.0/src/conn/pool.rs:38:13
      22:     0x560e06b0011a - mysql::conn::pool::Pool::new_manual::hc31bb0b50ebbccd0
                                   at /home/frank/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/mysql-16.1.0/src/conn/pool.rs:200:20
      23:     0x560e06acbd55 - obkv::location::ObTableLocation::get_or_create_mysql_pool::he665093014ad6c6c
                                   at /home/frank/ob/obkv/obkv-table-client-rs/src/location/mod.rs:567:33
      24:     0x560e06acde75 - obkv::location::ObTableLocation::get_table_entry_from_remote::hb099b29e8cb6f108
                                   at /home/frank/ob/obkv/obkv-table-client-rs/src/location/mod.rs:816:20
      25:     0x560e06acd338 - obkv::location::ObTableLocation::load_table_entry_randomly::hbbb127c1b5fe71a7
                                   at /home/frank/ob/obkv/obkv-table-client-rs/src/location/mod.rs:664:9
      26:     0x560e06a9d575 - obkv::client::table_client::ObTableClientInner::init_metadata::h97474ac57aadcd07
                                   at /home/frank/ob/obkv/obkv-table-client-rs/src/client/table_client.rs:1273:13
      27:     0x560e06a9b22d - obkv::client::table_client::ObTableClientInner::init::h26e654a285580413
                                   at /home/frank/ob/obkv/obkv-table-client-rs/src/client/table_client.rs:1142:9
      28:     0x560e06a9fd3b - obkv::client::table_client::ObTableClient::init::h84cd50a11ba30a5f
                                   at /home/frank/ob/obkv/obkv-table-client-rs/src/client/table_client.rs:1489:9
      29:     0x560e069fba1c - obkv_cli::build_client::ha0c2d099ef90f6d0
                                   at /home/frank/ob/obkv/obkv_cli/src/main.rs:37:5
      30:     0x560e069fbfd6 - obkv_cli::main::h8cc4d8f2d6733d3e
                                   at /home/frank/ob/obkv/obkv_cli/src/main.rs:76:18
      31:     0x560e069f809b - core::ops::function::FnOnce::call_once::h8587ff7b46b6bd57
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/ops/function.rs:248:5
      32:     0x560e069f795e - std::sys_common::backtrace::__rust_begin_short_backtrace::h7927763c39832bbb
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/sys_common/backtrace.rs:122:18
      33:     0x560e069f7731 - std::rt::lang_start::{{closure}}::h128c88e20d637041
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/rt.rs:166:18
      34:     0x560e0742d12f - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::hb69be6e0857c6cfb
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/ops/function.rs:283:13
      35:     0x560e0742d12f - std::panicking::try::do_call::h396dfc441ee9c786
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:492:40
      36:     0x560e0742d12f - std::panicking::try::h6cdda972d28b3a4f
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:456:19
      37:     0x560e0742d12f - std::panic::catch_unwind::h376039ec264e8ef9
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panic.rs:137:14
      38:     0x560e0742d12f - std::rt::lang_start_internal::{{closure}}::hc94720ca3d4cb727
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/rt.rs:148:48
      39:     0x560e0742d12f - std::panicking::try::do_call::h2422fb95933fa2d5
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:492:40
      40:     0x560e0742d12f - std::panicking::try::h488286b5ec8333ff
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:456:19
      41:     0x560e0742d12f - std::panic::catch_unwind::h81636549836d2a25
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panic.rs:137:14
      42:     0x560e0742d12f - std::rt::lang_start_internal::h6ba1bb743c1e9df9
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/rt.rs:148:20
      43:     0x560e069f770a - std::rt::lang_start::h572baf80932b36e1
                                   at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/rt.rs:165:17
      44:     0x560e069fc1d1 - main
      45:     0x7fc944aced90 - <unknown>
      46:     0x7fc944acee40 - __libc_start_main
      47:     0x560e069f7605 - _start
      48:                0x0 - <unknown>
    

    测试代码:

    // Copyright 2022 CeresDB Project Authors. Licensed under Apache-2.0.
    
    extern crate obkv;
    
    use std::{sync::Arc, thread, time};
    
    use obkv::{serde_obkv::value::Value, Builder, ClientConfig, ObTableClient, RunningMode, Table};
    
    // TODO: use test conf to control which environments to test.
    const TEST_FULL_USER_NAME: &str = "frank@sys#obcluster";
    const TEST_URL: &str = "http://172.18.108.43:8080/services?Action=ObRootServiceInfo&ObCluster=obcluster&database=test";
    const TEST_PASSWORD: &str = "frank";
    const TEST_SYS_USER_NAME: &str = "root@sys";
    const TEST_SYS_PASSWORD: &str = "root";
    
    fn build_client(mode: RunningMode) -> ObTableClient {
        let mut config = ClientConfig::default();
        config.min_idle_conns_per_server = 1;
        config.max_conns_per_server = 1;
        config.rpc_connect_timeout = std::time::Duration::from_secs(1);
        config.metadata_mysql_conn_pool_max_size = 1;
        config.metadata_mysql_conn_pool_min_size = 1;
    
        let builder = Builder::new()
            .full_user_name(TEST_FULL_USER_NAME)
            .param_url(TEST_URL)
            .running_mode(mode)
            .password(TEST_PASSWORD)
            .sys_user_name(TEST_SYS_USER_NAME)
            .sys_password(TEST_SYS_PASSWORD);
    
        let client = builder.build();
    
        assert!(client.is_ok());
    
        let client = client.unwrap();
        client.init().expect("Fail to create obkv client.");
        client
    }
    
    const TABLE_NAME: &str = "series_key_to_id_0";
    // read and write the table:
    // create table series_key_to_id_0 (
    //  series_key VARBINARY(8096) NOT NULL,
    //  series_id BIGINT NOT NULL,
    //  PRIMARY KEY(series_key),
    //  KEY index_id(series_id)
    // );
    fn concurrent_insert(client: Arc<ObTableClient>) {
        let mut thds = Vec::with_capacity(20);
        for i in 0..50 {
            let client = client.clone();
            let thd = thread::spawn(move || {
                for j in i * 100..(i * 100 + 50) {
                    let series_key = format!("series_key_test_padding_padding_{}", j);
                    let series_id = j * j;
                    client
                        .insert(
                            TABLE_NAME,
                            vec![Value::from(series_key.clone())],
                            vec!["series_id".to_owned()],
                            vec![Value::from(series_id as i64)],
                        )
                        .expect(&format!("fail to insert row:{} {}", series_key, series_id));
                }
            });
            thds.push(thd);
        }
    
        for (i, thd) in thds.into_iter().enumerate() {
            thd.join().expect(&format!("thread#{} fail to join", i));
        }
    }
    
    fn main() {
        let client = build_client(RunningMode::Normal);
        client
            .truncate_table(TABLE_NAME)
            .expect("fail to truncate the table");
        let start = time::Instant::now();
        concurrent_insert(Arc::new(client));
        let elapsed = time::Instant::now() - start;
        println!("Benches::concurrent_insert cost time:{:?}", elapsed);
    }
    
    

    curl测试ob-configserver正常:

    frank@LAPTOP-4OF1323N:~/ob/obkv/obkv_cli$ curl "http://172.18.108.43:8080/services?Action=ObRootServiceInfo&ObCluster=obcluster&database=test" | jq
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   337  100   337    0     0  29355      0 --:--:-- --:--:-- --:--:-- 30636
    {
      "Code": 200,
      "Message": "successful",
      "Success": true,
      "Data": {
        "ObClusterId": 1,
        "ObRegionId": 1,
        "ObCluster": "obcluster",
        "ObRegion": "obcluster",
        "ReadonlyRsList": [],
        "RsList": [
          {
            "address": "127.0.0.1:2882",
            "role": "LEADER",
            "sql_port": 2881
          }
        ],
        "Type": "PRIMARY",
        "timestamp": 1668058564676408
      },
      "Trace": "0a55540c19c43d88",
      "Server": "172.18.108.43",
      "Cost": 6
    }
    
    
    opened by FrankXMX 5
Owner
OceanBase
The Leading Scalable HTAP Database.
OceanBase
Zenith substitutes PostgreSQL storage layer and redistributes data across a cluster of nodes

Zenith substitutes PostgreSQL storage layer and redistributes data across a cluster of nodes

null 5.7k Jan 6, 2023
Plugin for macro-, mini-quad (quads) to save data in simple local storage using Web Storage API in WASM and local file on a native platforms.

quad-storage This is the crate to save data in persistent local storage in miniquad/macroquad environment. In WASM the data persists even if tab or br

ilya sheprut 9 Jan 4, 2023
A Key-Value data storage system. - dorea db

Dorea DB ?? Dorea is a key-value data storage system. It is based on the Bitcask storage model Documentation | Crates.io | API Doucment 简体中文 | English

ZhuoEr Liu 112 Dec 2, 2022
SQLite compiled to WASM with pluggable data storage

wasm-sqlite SQLite compiled to WASM with pluggable data storage. Useful to save SQLite in e.g. Cloudflare Durable Objects (example: https://github.com

Markus Ast 36 Dec 7, 2022
rustodrive is a rust client library for communicating with ODrives using the CAN protocol.

rustodrive is a WIP client library for communicating with ODrives using the CAN protocol. It is more than a simple CAN sender/receiver and has many co

null 5 Oct 31, 2022
Hypergraph is data structure library to create a directed hypergraph in which a hyperedge can join any number of vertices.

Hypergraph is data structure library to create a directed hypergraph in which a hyperedge can join any number of vertices.

Davy Duperron 224 Dec 21, 2022
Scalable and fast data store optimised for time series data such as financial data, events, metrics for real time analysis

OnTimeDB Scalable and fast data store optimised for time series data such as financial data, events, metrics for real time analysis OnTimeDB is a time

Stuart 2 Apr 5, 2022
LevelDB is a fast key-value storage library written at Google that provides an ordered mapping from string keys to string values.

LevelDB is a fast key-value storage library written at Google that provides an ordered mapping from string keys to string values. Authors: Sanjay Ghem

Google 31.5k Jan 1, 2023
The rust client for CeresDB. CeresDB is a high-performance, distributed, schema-less, cloud native time-series database that can handle both time-series and analytics workloads.

The rust client for CeresDB. CeresDB is a high-performance, distributed, schema-less, cloud native time-series database that can handle both time-series and analytics workloads.

null 12 Nov 18, 2022
Rust client for the anna-rs KVS that can run in the WasmEdge Runtime

wasmedge-anna-client wasmedge-anna-client is a Rust client for anna-rs based on Tokio for WasmEdge. It communicates with Anna routing nodes and KVS no

WasmEdge Runtime 4 Nov 8, 2022