
A modern NoSQL database, powered by BlueQL.
Skytable is a NoSQL database implemented using modern design paradigms, that focuses on performance, flexibility, and scalability.
Skytable is primarily in-memory, uses multithreaded asynchronous I/O and a custom AOF-based storage engine with advanced delayed durability transactions for efficient disk I/O. Skytable's data model is based on a column-oriented structure with support for additional data models(WIP). Querying is done using BlueQL, a SQL-based query language hardened against injection attacks, written specifically for Skytable.
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.
models to define data with complex types, collections and moreLearn more about Skytable's features here.
./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../skysh and then enter your password.For a more detailed guide on installation and deployment, follow the guide here.
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:
Create a space and switch to it:
CREATE SPACE myspace
USE myspaceCreate 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>,
}INSERT some data:
INSERT INTO mymodel('sayan', 'pass123', [])UPDATE some data:
UPDATE mymodel SET notes += "my first note" WHERE username = 'sayan'SELECT some data
SELECT * FROM mymodel WHERE username = 'sayan'Modify and run your own queries to understand how things work. 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)
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: [email protected] or leave a message on our Discord server.
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.
Please read the contributing guide here.
Please read the acknowledgements document.
Skytable is distributed under the AGPL-3.0 License. You may not use Skytable's logo for other projects.