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.

Overview

CeresDB Rust Client

License

Introduction

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.

Support features

  • Query
  • Write

Contributing

Any contribution is welcome!

Read our Contributing Guide and make your first contribution!

License

Under Apache License 2.0.

Community and support

  • Join the user group on Slack
  • Join the user group on WeChat WeChat QR code
  • Join the user group on DingTalk: 44602802
Comments
  • Please add std::error::Error trait impl for ceresdb-client-rs::Error

    Please add std::error::Error trait impl for ceresdb-client-rs::Error

    It can't work because of not satisfied std::error::Error trait, when I use thiserror (#[from] ceresdb-client-rs::Error), I have to impl From<ceresdb_client_rs::Error> for ExbotError

    use thiserror::Error;
    
    pub type Result<T> = std::result::Result<T, ExbotError>;
    
    #[derive(Error, Debug)]
    pub enum ExbotError {
        #[error("ceresdb client error: {0:?}")]
        CeresDb(#[from] ceresdb_client_rs::Error),
    }
    
    //impl From<ceresdb_client_rs::Error> for ExbotError {
    //fn from(err: ceresdb_client_rs::Error) -> Self {
    //ExbotError::CeresDb(err)
    //}
    //}
    

    image

    opened by wisarmy 3
  • feat: display rows in csv format

    feat: display rows in csv format

    Signed-off-by: Ruihang Xia [email protected]

    Display QueriedRows in csv format. An example:

    t,tsid,name,value,,
    Timestamp(Timestamp(1651737067000)),Int64(-6317898613073581291),String(StringBytes(b"ceresdb")),Double(100.0),,
    
    opened by waynexia 3
  • feat: client for cluster

    feat: client for cluster

    Rationale for this change

    Now, the rust client can only be used for ceresdb of standalone mode. We should modify it for serving ceresdb of cluster mode.

    What changes are included in this PR?

    • Refactor project's directory organization for clearer structure.
    • Add router to fetch endpoint for metrics.
    • Add cluster implementation for client.

    Are there any user-facing changes?

    Users can now use client to access ceresdb of cluster mode.

    How does this change test

    CI itself.

    enhancement 
    opened by Rachelint 2
  • refactor: upgrade implementation of GRPC (from grpcio to tonic)

    refactor: upgrade implementation of GRPC (from grpcio to tonic)

    Which issue does this PR close?

    Closes issue 240 in the main repo. Closes #16

    Rationale for this change

    Tonic is a native gRPC implementation with these pros:

    • Native, and safety.
    • More users (compare to grpcio)
    • Lower memory consumption

    What changes are included in this PR?

    1. Remove the dependency: grpcio.
    2. Reimplement the RpcClientImpl.
    3. Refactor RpcClientImplBuilder and renamed to RpcClientImplFactory.
    4. Refactor the hierarchy of the codes. DbClient Implementations for both the standalone mode and cluster mode was made to depend on the underlying InnerClient.

    Are there any user-facing changes?

    This PR just restructures the source code so as to improve maintainability without altering functionality.

    How does this change test

    Pass the existing CI.

    opened by archerny 1
  • Query may fail if response is empty

    Query may fail if response is empty

    Problem

    Currently, the query response won't contain schema information if no data is found, which will lead to failure in parsing schema.

    Proposal

    Avoid parsing schema if no data is found.

    opened by ShiKaiWi 1
  • refactor: Refactor client interface to remove the explicit dependency on ceresdbproto

    refactor: Refactor client interface to remove the explicit dependency on ceresdbproto

    Rationale for this change

    Refactor client interface to Improve usability.

    What changes are included in this PR?

    Change req's type in DbClient::query from ceresdbproto::QueryRequest to QueryRequest, and impl From for ceresdbproto::QueryRequest.

    Are there any user-facing changes?

    Users can use this client independently without explicitly introducing ceresdbproto crate.

    How does this change test

    By existing UT

    opened by Rachelint 1
  • feat: standardize error

    feat: standardize error

    Which issue does this PR close?

    Closes #25

    Rationale for this change

    Now, error in our client doesn't implement std::error::Error. It may lead to problem while interact some error handling crates such thiserror(see #25 ).

    What changes are included in this PR?

    Use thiserror to standardize our error type.

    Are there any user-facing changes?

    None.

    How does this change test

    Test by ut.

    opened by Rachelint 0
  • fix: error while quried result is empty.

    fix: error while quried result is empty.

    Rationale for this change

    Now, fix the error mentioned in title.

    What changes are included in this PR?

    • fix error.

    Are there any user-facing changes?

    None.

    How does this change test

    Check by manual test with CeresDB.

    opened by Rachelint 0
  • Upgrade ceresdbproto to replace grpcio with tonic

    Upgrade ceresdbproto to replace grpcio with tonic

    After the ceresdbproto has been migrated to tonic toolchain, we hope the client should follow such a migration to avoid use of grpcio.

    More information can be found in: https://github.com/CeresDB/ceresdb/issues/240

    opened by ShiKaiWi 0
  • Support routing requests

    Support routing requests

    Problems

    Now the CeresDB server provides routing information by route gRPC method but the client has not supported this api yet, that is to say, the client can't be used for a CeresDB cluster.

    Proposal

    • Retreive routing information about the query/write requests;
    • Cache the routing inforamtion in the client;
    • Able to evict the invalid routing entries;

    Additional Context

    Java client can provide a good example about the propasal.

    opened by ShiKaiWi 0
  • Re-export types from `common_types` dependency

    Re-export types from `common_types` dependency

    This way downstream consumer like ceresdb-client-py only have to depend on ceresdb-client-rs, never gonna mix up different versions of common_types crate.

    opened by messense 0
Owner
null
A Modern Real-Time Data Processing & Analytics DBMS with Cloud-Native Architecture, built to make the Data Cloud easy

A Modern Real-Time Data Processing & Analytics DBMS with Cloud-Native Architecture, built to make the Data Cloud easy

Datafuse Labs 5k Jan 9, 2023
open source training courses about distributed database and distributed systemes

Welcome to learn Talent Plan Courses! Talent Plan is an open source training program initiated by PingCAP. It aims to create or combine some open sour

PingCAP 8.3k Dec 30, 2022
RisingWave is a cloud-native streaming database that uses SQL as the interface language.

RisingWave is a cloud-native streaming database that uses SQL as the interface language. It is designed to reduce the complexity and cost of building real-time applications. RisingWave consumes streaming data, performs continuous queries, and updates results dynamically. As a database system, RisingWave maintains results inside its own storage and allows users to access data efficiently.

Singularity Data 3.7k Jan 2, 2023
High performance and distributed KV store w/ REST API. 🦀

About Lucid KV High performance and distributed KV store w/ REST API. ?? Introduction Lucid is an high performance, secure and distributed key-value s

Lucid ᵏᵛ 306 Dec 28, 2022
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.

Foretag 3 Mar 24, 2022
A prototype of a high-performance KV database built with Rust.

async-redis A prototype of a high-performance KV database built with Rust. Author: 3andero 11/10/2021 Overview The project starts as a fork of mini-re

null 3 Nov 29, 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
Visualize your database schema

dbviz Visualize your database schema. The tool loads database schema and draws it as a graph. Usage $ dbviz -d database_name | dot -Tpng > schema.png

yunmikun2 2 Sep 4, 2022
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

Fremantle Industries 5 Apr 26, 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
Distributed SQL database in Rust, written as a learning project

toyDB Distributed SQL database in Rust, written as a learning project. Most components are built from scratch, including: Raft-based distributed conse

Erik Grinaker 4.6k Jan 8, 2023
Rust High Performance compile-time ORM(RBSON based)

WebSite | 简体中文 | Showcase | 案例 A highly Performant,Safe,Dynamic SQL(Compile time) ORM framework written in Rust, inspired by Mybatis and MybatisPlus.

rbatis 1.7k Jan 7, 2023
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 scalable, distributed, collaborative, document-graph database, for the realtime web

is the ultimate cloud database for tomorrow's applications Develop easier. Build faster. Scale quicker. What is SurrealDB? SurrealDB is an end-to-end

SurrealDB 16.9k Jan 8, 2023
Embedded Distributed Encrypted Database (Research).

EDED Embedded Distributed Encrypted Database. Research projects to support ESSE. WIP Distributed design features Adapt to personal distributed usecase

Sun 2 Jan 6, 2022
Asynchronous handle for rusqlite library.

tokio-rusqlite Asynchronous handle for rusqlite library. Usage use rusqlite::{params, Result}; use tokio_rusqlite::Connection; #[derive(Debug)] struc

Eray Karatay 22 Dec 22, 2022
Quick Pool: High Performance Rust Async Resource Pool

Quick Pool High Performance Rust Async Resource Pool Usage DBCP Database Backend Adapter Version PostgreSQL tokio-postgres qp-postgres Example use asy

Seungjae Park 13 Aug 23, 2022
🔥🌲 High-performance Merkle key/value store

merk High-performance Merkle key/value store Merk is a crypto key/value store - more specifically, it's a Merkle AVL tree built on top of RocksDB (Fac

Nomic 189 Dec 13, 2022