Top Related Projects
TiDB is an open-source, cloud-native, distributed, MySQL-Compatible database for elastic scale and real-time analytics. Try AI-powered Chat2Query free at : https://www.pingcap.com/tidb-serverless/
CockroachDB — the cloud native, distributed SQL database designed for high availability, effortless scale, and control over data placement.
The high-performance database for modern applications
🥑 ArangoDB is a native multi-model database with flexible data models for documents, graphs, and key-values. Build high performance applications using a convenient SQL-like query language or JavaScript extensions.
The open-source database for the realtime web.
Quick Overview
Chai is an embeddable database engine for Go applications, designed to be fast and easy to use. It provides a SQL-like query language with support for ACID transactions, indexes, and joins, making it suitable for various application types that require local data storage and querying capabilities.
Pros
- Embeddable and lightweight, ideal for applications requiring a local database
- Supports ACID transactions, ensuring data integrity
- Provides a SQL-like query language for familiar and powerful querying
- Offers good performance with optimized indexing and query execution
Cons
- Limited ecosystem compared to more established databases
- May lack some advanced features found in full-fledged SQL databases
- Documentation could be more comprehensive for complex use cases
- Primarily focused on Go, which may limit its adoption in other languages
Code Examples
- Creating a table and inserting data:
db, err := chai.Open("mydb")
if err != nil {
log.Fatal(err)
}
defer db.Close()
err = db.Exec("CREATE TABLE users (id INT, name TEXT, age INT)")
if err != nil {
log.Fatal(err)
}
err = db.Exec("INSERT INTO users (id, name, age) VALUES (?, ?, ?)", 1, "Alice", 30)
if err != nil {
log.Fatal(err)
}
- Querying data:
var users []struct {
ID int
Name string
Age int
}
err = db.QueryRows("SELECT * FROM users WHERE age > ?", 25).Scan(&users)
if err != nil {
log.Fatal(err)
}
for _, user := range users {
fmt.Printf("User: %s, Age: %d\n", user.Name, user.Age)
}
- Using transactions:
tx, err := db.Begin()
if err != nil {
log.Fatal(err)
}
err = tx.Exec("UPDATE users SET age = ? WHERE id = ?", 31, 1)
if err != nil {
tx.Rollback()
log.Fatal(err)
}
err = tx.Commit()
if err != nil {
log.Fatal(err)
}
Getting Started
To use Chai in your Go project, follow these steps:
-
Install Chai:
go get github.com/chaisql/chai
-
Import Chai in your Go code:
import "github.com/chaisql/chai"
-
Create and open a database:
db, err := chai.Open("mydb") if err != nil { log.Fatal(err) } defer db.Close()
-
Start using Chai to create tables, insert data, and query your database as shown in the code examples above.
Competitor Comparisons
TiDB is an open-source, cloud-native, distributed, MySQL-Compatible database for elastic scale and real-time analytics. Try AI-powered Chat2Query free at : https://www.pingcap.com/tidb-serverless/
Pros of TiDB
- Distributed architecture for high scalability and availability
- Supports both OLTP and OLAP workloads
- Compatible with MySQL protocol and ecosystem
Cons of TiDB
- More complex setup and maintenance due to distributed nature
- Higher resource requirements for deployment
- Steeper learning curve for administration and optimization
Code Comparison
TiDB (SQL-like syntax):
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(255),
age INT
);
Chai (JavaScript-like syntax):
db.createTable('users', {
id: db.int().primaryKey(),
name: db.string(),
age: db.int()
})
Key Differences
- TiDB is a distributed SQL database, while Chai is an embedded database for Go applications
- TiDB offers more advanced features for large-scale deployments, whereas Chai focuses on simplicity and ease of use
- TiDB uses a SQL-like syntax, while Chai employs a JavaScript-like API for database operations
- TiDB is designed for production-grade, distributed environments, while Chai is better suited for smaller, local applications
Use Cases
TiDB:
- Large-scale web applications
- Distributed systems requiring high availability
- Hybrid transactional and analytical processing
Chai:
- Embedded databases in Go applications
- Local data storage for desktop or mobile apps
- Prototyping and small-scale projects
CockroachDB — the cloud native, distributed SQL database designed for high availability, effortless scale, and control over data placement.
Pros of CockroachDB
- Highly scalable distributed SQL database with strong consistency
- Built-in support for geo-partitioning and multi-region deployments
- Enterprise-grade features like role-based access control and backup/restore
Cons of CockroachDB
- More complex setup and maintenance compared to Chai
- Higher resource requirements for optimal performance
- Steeper learning curve for developers new to distributed systems
Code Comparison
CockroachDB (SQL syntax):
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name STRING,
email STRING UNIQUE,
created_at TIMESTAMP DEFAULT current_timestamp()
);
Chai (Go syntax):
type User struct {
ID string `chai:"primary"`
Name string
Email string `chai:"unique"`
CreatedAt time.Time `chai:"default:now()"`
}
db.CreateTable("users", User{})
CockroachDB offers a more traditional SQL syntax, while Chai provides a Go-native approach to defining schemas. CockroachDB's SQL syntax may be more familiar to developers with SQL experience, whereas Chai's struct-based approach integrates more seamlessly with Go code.
Both databases support common features like primary keys, unique constraints, and default values, but their implementation and syntax differ significantly.
The high-performance database for modern applications
Pros of Dgraph
- More mature and feature-rich graph database system
- Supports distributed and scalable deployments
- Has a powerful query language (GraphQL+-) and built-in GraphQL support
Cons of Dgraph
- Higher complexity and steeper learning curve
- Requires more resources to run and maintain
- Less suitable for simple, embedded use cases
Code Comparison
Dgraph query example:
{
me(func: eq(name, "Alice")) {
name
age
friends {
name
}
}
}
Chai query example:
db.Query("SELECT * FROM users WHERE name = ? AND age > ?", "Alice", 25)
Dgraph focuses on graph-based queries with relationships, while Chai uses a more traditional SQL-like syntax for querying. Dgraph's query language is more expressive for complex graph relationships, but Chai's approach may be more familiar to developers used to working with relational databases.
Dgraph is better suited for large-scale, distributed graph database applications, while Chai is designed as a lightweight, embedded database for Go applications. Dgraph offers more advanced features and scalability, but Chai provides simplicity and ease of use for smaller projects or those requiring a more traditional database approach.
🥑 ArangoDB is a native multi-model database with flexible data models for documents, graphs, and key-values. Build high performance applications using a convenient SQL-like query language or JavaScript extensions.
Pros of ArangoDB
- More mature and feature-rich database system with multi-model support (document, graph, key/value)
- Larger community and ecosystem, with extensive documentation and third-party integrations
- Supports distributed deployments and horizontal scaling
Cons of ArangoDB
- Higher resource requirements and more complex setup compared to Chai
- Steeper learning curve due to its extensive feature set
- May be overkill for simpler projects or applications with basic database needs
Code Comparison
ArangoDB (AQL query):
FOR user IN users
FILTER user.age >= 18
SORT user.name
RETURN { name: user.name, age: user.age }
Chai:
db.View(func(tx *chai.Tx) error {
return tx.From("users").
Where(chai.GTE("age", 18)).
OrderBy("name").
Select("name", "age").
Iterate(func(d chai.Document) error {
// Process each document
return nil
})
})
Summary
ArangoDB is a more comprehensive database solution with advanced features and scalability, suitable for complex applications. Chai, on the other hand, is a lightweight embedded database for Go, offering simplicity and ease of use for smaller projects or applications with straightforward database requirements.
The open-source database for the realtime web.
Pros of RethinkDB
- Mature and battle-tested database with a large community and extensive documentation
- Built-in support for real-time changefeeds and horizontal scaling
- Offers a powerful query language (ReQL) with support for complex operations and joins
Cons of RethinkDB
- Heavier resource usage and more complex setup compared to Chai
- Development has slowed down in recent years
- Steeper learning curve for new users due to its unique query language
Code Comparison
RethinkDB query example:
r.table('users')
.filter(r.row['age'].gt(18))
.orderBy('name')
.limit(10)
.run(conn)
Chai query example:
db.Query("SELECT * FROM users WHERE age > ? ORDER BY name LIMIT ?", 18, 10)
Key Differences
- RethinkDB is a full-fledged distributed database system, while Chai is an embedded database for Go applications
- RethinkDB uses a custom query language (ReQL), whereas Chai uses SQL-like syntax
- RethinkDB offers more advanced features like real-time updates and horizontal scaling, while Chai focuses on simplicity and ease of use in Go projects
Use Cases
- RethinkDB: Ideal for large-scale applications requiring real-time data synchronization and complex querying
- Chai: Well-suited for Go applications needing a lightweight, embedded database with SQL-like syntax
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
ChaiSQL
ChaiSQL is a modern embedded SQL database, focusing on flexibility and ease of use for developers.
Key Features
- PostgreSQL API: ChaiSQL SQL API is compatible with PostgreSQL
- Optimized for Go: Native Go implementation with no CGO dependency.
- Storage flexibility: Store data on-disk or in-memory.
- Solid foundations: ChaiSQL is backed by Pebble for native Go toolchains, and RocksDB for non-Go or CGO builds (coming soon).
Roadmap
ChaiSQL is work in progress and is not ready yet for production.
Here is a high level list of features that we want to implement in the near future, in no particular order:
- Stable storage format (90% completed)
- Implement most of the SQL-92 standard (detailed roadmap coming soon)
- Provide clients for other languages (JS/TS, Python, etc) and add support for RocksDB as the backend
- Compatibility with PostgreSQL drivers and ORMs
Installation
Install the ChaiSQL database
go install github.com/chaisql/chai
Quickstart
package main
import (
"context"
"fmt"
"log"
"github.com/chaisql/chai"
)
func main() {
// Create a database instance, here we'll store everything on-disk
db, err := chai.Open("mydb")
if err != nil {
log.Fatal(err)
}
defer db.Close()
err = db.Exec(`
CREATE TABLE user (
id INT PRIMARY KEY,
name TEXT NOT NULL UNIQUE,
created_at TIMESTAMP NOT NULL
)
`)
err = db.Exec(`INSERT INTO user (id, name, age) VALUES ($1, $2, $3)`, 20, "foo", 40)
rows, err := db.Query("SELECT id, name, age, address FROM user WHERE age >= $1", 18)
defer rows.Close()
err = rows.Iterate(func(r *chai.Row) error {
// scan each column
var id, name, age
err = r.Scan(&id, &name, &age)
// or into a struct
var u User
err = r.StructScan(&u)
// or even a map
var m map[string]any
err = r.MapScan(&m)
return nil
})
}
Checkout the Go doc and the usage example in the README to get started quickly.
In-memory database
For in-memory operations, simply use :memory:
:
db, err := chai.Open(":memory:")
Using database/sql
// import chai as a blank import
import _ "github.com/chaisql/chai/driver"
// Create a sql/database DB instance
db, err := sql.Open("chai", "mydb")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// Then use db as usual
res, err := db.ExecContext(...)
res, err := db.Query(...)
res, err := db.QueryRow(...)
// use the driver.Scanner to scan into a struct
var u User
err = res.Scan(driver.Scanner(&u))
chai shell
The chai command line provides an SQL shell for database management:
go install github.com/chaisql/chai/cmd/chai@latest
Usage example:
# For in-memory database:
chai
# For disk-based database:
chai dirName
Contributing
Contributions are welcome!
A big thanks to our contributors!
Made with contrib.rocks.
For any questions or discussions, open an issue.
Top Related Projects
TiDB is an open-source, cloud-native, distributed, MySQL-Compatible database for elastic scale and real-time analytics. Try AI-powered Chat2Query free at : https://www.pingcap.com/tidb-serverless/
CockroachDB — the cloud native, distributed SQL database designed for high availability, effortless scale, and control over data placement.
The high-performance database for modern applications
🥑 ArangoDB is a native multi-model database with flexible data models for documents, graphs, and key-values. Build high performance applications using a convenient SQL-like query language or JavaScript extensions.
The open-source database for the realtime web.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot