Appearance
libSQL v.s. SQLite
libSQL 是從 SQLite fork 出來的專案,所以:
- SQL 語法 幾乎完全相同
- 檔案格式 相容
- 但 架構能力更強
可以把它理解成:
SQLite + Server + Replication + HTTP API1️⃣ 相同的地方
libSQL 基本上繼承 SQLite 的核心。
| 功能 | SQLite | libSQL |
|---|---|---|
| SQL syntax | ✅ | ✅ |
| SQLite file format | ✅ | ✅ |
| ACID transaction | ✅ | ✅ |
| Single DB file | ✅ | ✅ |
例如:
sql
CREATE TABLE users(
id INTEGER PRIMARY KEY,
name TEXT
);兩者都一樣。
甚至 SQLite DB file 可以直接給 libSQL 用。
2️⃣ libSQL 多出的能力
libSQL 為了解決 SQLite 的限制,增加了 server 能力。
| 功能 | SQLite | libSQL |
|---|---|---|
| Embedded DB | ✅ | ✅ |
| Client-server | ❌ | ✅ |
| HTTP API | ❌ | ✅ |
| Replication | ❌ | ✅ |
| Edge database | ❌ | ✅ |
| Remote connection | ❌ | ✅ |
例如你 log 裡看到:
HTTP connection on 8080
gRPC connection on 5001這是 SQLite 沒有的。
3️⃣ 架構差異
SQLite
典型架構:
Application
│
SQLite library
│
DB file完全 embedded。
libSQL
server 架構:
Application
│
HTTP / gRPC
│
libsql server (sqld)
│
SQLite engine
│
DB file多了一層 database server。
4️⃣ 為什麼會有 libSQL
SQLite 有幾個限制:
| SQLite 問題 |
|---|
| 不能遠端連線 |
| 沒有 replication |
| 沒有 cluster |
| 不能 edge sync |
所以 Turso 團隊做了 libSQL。
5️⃣ 相容性
好消息是:
SQLite tools
↓
大部分可用於 libSQL例如:
- SQLite DB file
- SQL syntax
- migration
都相容。
6️⃣ 一句話理解
SQLite = embedded database
libSQL = distributed SQLite server或更直白:
libSQL ≈ SQLite server edition💡 很多人不知道的一個事實
其實:
- Turso
- Fly.io edge DB
背後都是 libSQL。