Skytable is a modern scalable NoSQL database with BlueQL, designed for performance, scalability and flexibility. Skytable gives you spaces, models, data types, complex collections and more to build powerful experiences
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Sayan 4fcb0ee3c9
net: Fix RST and thread crash due to multiple HS errors (#341)
5 months ago
.cargo Remove old tools 10 months ago
.github release: v0.8.1 6 months ago
assets Update docs and fix dpkg scripts [skip ci] 10 months ago
ci Implement new dbtest macros 10 months ago
cli release: v0.8.1 6 months ago
examples/config-files Update docs and fix dpkg scripts [skip ci] 10 months ago
harness Upgrade deps 6 months ago
libsky release: v0.8.1 6 months ago
pkg Fix Docker images 10 months ago
server net: Fix RST and thread crash due to multiple HS errors (#341) 5 months ago
sky-bench release: v0.8.1 6 months ago
sky-macros release: v0.8.1 6 months ago
.build.yml Fix CI script and resolve artifact name conflict 3 years ago
.ci.yml Upgrade deps and ignore tree test on M1 builder 2 years ago
.dockerignore Fix Docker images 10 months ago
.gitignore Implement new REPL and remove old impls 10 months ago
ACKNOWLEDGEMENTS.txt Update docs and fix dpkg scripts [skip ci] 10 months ago
AUTHORS.md Enable string escaping with quotes for skysh 4 years ago
CHANGELOG.md net: Fix RST and thread crash due to multiple HS errors (#341) 5 months ago
CODEOWNERS Update CODEOWNERS 3 years ago
CODE_OF_CONDUCT.md Improve community documentation 4 years ago
CONTRIBUTING.md Improve contributing docs [skip ci] 8 months ago
Cargo.lock net: Retries based on `expect` values are pointless 5 months ago
Cargo.toml Implement new benchmark tool 10 months ago
Dockerfile Fix Docker images 10 months ago
LICENSE Formal terrapipe query parsing 4 years ago
Makefile Guard against allocation errors in `libstress` 2 years ago
README.md Default to `pwd` auth plugin and fix fs testing 7 months ago
SECURITY.md Revoke old public security key 3 years ago
pushrelease.sh Improve workflow and docs 4 years ago
release.sh Bump up version, add changelog and update scripts (#159) 3 years ago

README.md

Skytable Skytable Logo

A modern NoSQL database, powered by BlueQL.

GitHub release (with filter) GitHub Workflow Status (with event) Discord Docs Static Badge

What is Skytable?

Skytable is a modern NoSQL database that focuses on performance, flexibility and scalability. Skytable is a primarily in-memory, wide-column based database with support for additional data models* that uses its own storage engine (structured like n-ary records with optimized delayed-durability transactions) and enables querying with its own query language BlueQL that builds on top of SQL to improve security and flexibility.

Skytable is best-suited for applications that need to store large-scale data, need high-performance and low latencies.

You can read more about Skytable's architecture, including information on the clustering and HA implementation that we're currently working on, and limitations on this page.

Features

  • Spaces, models and more: For flexible data definition
  • Powerful querying with BlueQL: A modern query language based on SQL
  • Rich data modeling: Use models to define data with complex types, collections and more
  • Performant: Heavily multithreaded, optimized write batching and more
  • Secure: BlueQL is designed to strongly deter query injection pathways
  • Enforces best practices: If you're building with Skytable today, the practices you'll learn here will let you easily take on the job of building performant systems, even outside Skytable

Learn more about Skytable's features here.

Getting started

  1. Set up Skytable on your machine: You'll need to download a bundled release file from the releases page. Unzip the files and you're ready to go.
  2. Start the database server: ./skyd --auth-root-password <password> with your choice of a password for the root account. The root account is just like a root account on Unix based systems that has control over everything.
  3. Start the interactive client REPL: ./skysh and then enter your password.
  4. You're ready to run queries!

For a more detailed guide on installation and deployment, follow the guide here.

Using Skytable

Skytable has SPACEs instead of DATABASEs due to signficant operational differences (and because SPACEs store a lot more than tabular data).

With the REPL started, follow this guide:

  1. Create a space and switch to it:
    CREATE SPACE myspace
    USE myspace
    
  2. Create a model:
    CREATE MODEL myspace.mymodel(username: string, password: string, notes: list { type: string })
    
    The rough representation for this in Rust would be:
    pub struct MyModel {
     username: String,
     password: String,
     notes: Vec<String>,
    }
    
  3. INSERT some data:
    INSERT INTO mymodel('sayan', 'pass123', [])
    
  4. UPDATE some data:
    UPDATE mymodel SET notes += "my first note" WHERE username = 'sayan'
    
  5. SELECT some data
    SELECT * FROM mymodel WHERE username = 'sayan'
    
  6. Poke around! And then make sure you read the documentation learn BlueQL.

For a complete guide on Skytable, it's architecture, BlueQL, queries and more we strongly recommend you to read the documentation here.

While you're seeing strings and other values being used here, this is so because the REPL client smartly parameterizes queries behind the scenes. BlueQL has mandatory parameterization. (See below to see how the Rust client handles this)

Find a client driver

You need a client driver to use Skytable in your programs. Officially, we maintain a regularly updated Rust client driver which is liberally license under the Apache-2.0 license so that you can use it anywhere.

Using the Rust client driver, it's very straightforward to run queries thanks to Rust's powerful type system and macros:

use skytable::{Config, query};

fn main() {
    let mut db = Config::new_default("username", "password").connect().unwrap();
    let query = query!("select username, password from myspace.mymodel where username = ?", "sayan");
    let (username, password): (String, Vec<u8>) = db.query_parse(&query).unwrap();
    // do something with it!
}

You can find more information on client drivers on this page. If you want to help write a client driver for your language of choice, we're here to support your work. Please reach out to: hey@skytable.io or leave a message on our Discord server!

Getting help

We exclusively use Discord for most real-time communications — you can chat with developers, maintainers, and our amazing users! Outside that, we recommend that you use our GitHub Discussions page for any questions or open a new issue if you think you've found a bug.

We're here to help!

Contributing

Please read the contributing guide here.

Acknowledgements

Please read the acknowledgements document.

License

Skytable is distributed under the AGPL-3.0 License. You may not use Skytable's logo for other projects.