sqlite大名鼎鼎,应用广泛. 但并发性一直是我头痛的问题.如果Turso支持超过10个并发,那将是我的应用首选.
“Turso引入了实验性的BEGIN CONCURRENT特性,通过多版本控制MVCC显著提升了写操作吞吐量,解决了SQLite在高并发写入场景下的性能瓶颈”. 但具体怎么样还等待验证.
Turso 是一个用 Rust 编写的进程内 SQL 数据库,兼容 SQLite。
跨平台支持,包括 Linux、macOS、Windows 和浏览器(通过 WebAssembly). 也提供go库:turso-go
提供本地数据加密保护. 这是我在sqlite中没看到的. 稍后可以看到go的示例.
还提供一个MCP服务器模式: tursodb xx.db –mcp. 支持打开库,列出表,查询,更新,删除,修改等操作.
package main
import (
"database/sql"
"fmt"
"os"
_ "github.com/tursodatabase/turso-go"
)
func main() {
conn, err := sql.Open("turso", ":memory:") // 内存数据库
if err != nil {
fmt.Printf("Error: %v\n", err)
os.Exit(1)
}
sql := "CREATE table go_turso (foo INTEGER, bar TEXT)"
_, _ = conn.Exec(sql)
sql = "INSERT INTO go_turso (foo, bar) values (?, ?)"
stmt, _ := conn.Prepare(sql)
defer stmt.Close()
_, _ = stmt.Exec(42, "turso")
rows, _ := conn.Query("SELECT * from go_turso")
defer rows.Close()
for rows.Next() {
var a int
var b string
_ = rows.Scan(&a, &b)
fmt.Printf("%d, %s", a, b)
}
}
数据库加密
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/tursodatabase/turso-go"
)
func main() {
key := "5d8a8f20e33bbe37a449b473f38469229d8772aa6250d6f32c5bb2587f46224f"
dbPath := fmt.Sprintf("file:gottem.db?cipher=aegis256&hexkey=%s", key)
db, err := sql.Open("turso", dbPath)
if err != nil {
log.Fatal(err)
}
defer db.Close()
_, err = db.Exec("create table if not exists t(x text);")
if err != nil {
log.Fatal(err)
}
_, err = db.Exec(`insert into t(x) values
('thick'), ('hugge'), ('bigger');`)
if err != nil {
log.Fatal(err)
}
rows, err := db.Query("select x from t;")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
fmt.Println("In t we have:")
for rows.Next() {
var val string
if err := rows.Scan(&val); err != nil {
log.Println(err)
continue
}
fmt.Println("-", val)
}
}
打赏