Basic Usage#
Refer to https://docs.turso.tech/quickstart#select-all-rows-from-table for the quick start documentation.
- Install turso cli
- Log in, register turso
- Create a database
- Show database status
- Enter database shell
- Write SQL to create table, insert data, query data - this part will be completed later using drizzle
- Copy the database to another region locations
It's relatively simple to use, and there are two options for connecting to the database in subsequent business: sdk and http connection.
- Get the db's url
- Get the jwt's token
- Install
@libsql/client - Create a client based on
createClient - Client executes sql
Based on drizzle ORM#
Related:
- [[Drizzle ORM Documentation Quick Start]]
- [[01-Understanding Exploring sqlite and Cloudflare D1]]
- [[node + sqlite]]
- [[better-sqlite3]]
Drizzle has first-class support for sqlite, and even AstroDB is wrapped based on drizzle.
Usage:
- Install
drizzle-ormand@libsql/clientdependencies - Install
drizzle-kitas a development dependency for generating sql and migration sql development operationsdrizzle-kit generateto generatedrizzle-kit migrateto migratedrizzle-kit studioto view on the page
- Get the db's uri and jwt token
- Create
db/schema.tsto export table definitions - Configure
drizzle.config.tsto set schema location, driver, connection parameters - Use libsql to create a client instance, wrapped with drizzle
- If the schema is modified, generate sql and migrate the database
- Use studio to view data
The documentation also mentions that you can use sentry to capture slow sql queries and sql errors.
Based on http Method#
libsql remote protocol
- Get the db's url and token
- Complete the
/v2/pipelinebased on the http url - Prepare the json payload parameters, execute and close
- Use post to send and query results
- During the sending process, parameter indexing and naming were mentioned
Why close? If not closed, it can still be continued based on ctx within 10s.
This method is based on http and is a unique connection solution that can easily connect in any scenario, which is quite interesting.
Keyword Explanation#
- sqlite is the db itself
- turso is the encapsulation of the entire solution
Docker Self-hosting#
The following can achieve an unauthenticated scheme to intercept the hosted libsql-server, but for jwt authentication, further investigation is needed.
Documentation address
https://github.com/tursodatabase/libsql/blob/main/docs/DOCKER.md
Using this on an M1 chip Apple
docker run --name some-sqld -p 8080:8080 -ti \
-e SQLD_NODE=primary \
--platform linux/amd64 \
ghcr.io/tursodatabase/libsql-server:latest
Data Persistence
Environment variables
- sqld_node=primary/replica/standalone
- Data volume
-v sqld-data:/var/lib/sqld - db location, essentially still sqlite,
SQLD_DB_PATH=iku.db - Remote jwt authorization
sqld_auth_jwt_key_filepass a key.pem private key,- You can also use
SQLD_AUTH_JWT_KEYto directly pass a string
- You can also use
What does jwt look like? Hope to connect and operate via http in the future.
{
"requests": [
{ "type": "execute", "stmt": { "sql": "SELECT * FROM users" } },
{ "type": "close" }
]
}
Hosted Service Quick Code#
# Show url
turso db show my-db --http-url
# token
turso db tokens create my-db
Refer to https://www.json.cn/jwt/
https://jwt.io/
// header
{
"alg": "EdDSA",
"typ": "JWT"
}
// payload
{
"iat": 1726756735,
"id": "81220406-4854-4d4b-817e-61f4a092cdc4"
}