12个稳定版本
1.3.1 | 2021年11月26日 |
---|---|
1.2.10 | 2021年11月24日 |
1.1.1 | 2021年11月24日 |
1.0.0 | 2021年11月24日 |
#1148 在 数据库接口
每月 34 次下载
2.5MB
551 行
包含 (ELF可执行文件/库, 1.5MB) main_shared, (WOFF字体, 290KB) doc/noto-sans-kr-v13-korean-regular.woff, (WOFF字体, 190KB) doc/FiraSans-Medium.woff, (WOFF字体, 135KB) doc/FiraSans-Medium.woff2, (WOFF字体, 185KB) doc/FiraSans-Regular.woff, (WOFF字体, 130KB) doc/FiraSans-Regular.woff2 等等12个。
ruster
Ruster是一个使用ffi进行数据库管理的库,支持psql/pg_dump + mysql/mysqldump,由Rust编写。
生成的C静态库和共享库可以在其他语言中重用(例如Golang)。
构建ruster
项目的构建产生2个go可执行文件,1个静态库(libruster.a)和1个共享库(libruster.so)。
C函数的头文件在lib/ruster.h中,必须在代码生成之前存在。
make build-shared
make build-static
使用ruster
PostgreSQL
/*
#cgo LDFLAGS: -L./lib -lruster
#include "./lib/ruster.h"
*/
import "C"
import (
"os"
)
func main() {
os.Getenv("PGPASSWORD")
err := func() error {
C.pg_dump_database(
C.CString("localhost"),
C.CString("5432"),
C.CString("postgres"),
C.CString("postgres"),
C.CString("pg_dump.sql"),
C.CString("true"),
);
return nil
}
if err() == nil {
func() {
C.psql_restore_database(
C.CString("localhost"),
C.CString("5432"),
C.CString("postgres"),
C.CString("postgres"),
C.CString("pg_dump.sql"),
C.CString("true"),
);
}()
}
}
MySQL - Mariadb
/*
#cgo LDFLAGS: -L./lib -lruster
#include "./lib/ruster.h"
*/
import "C"
import (
"os"
)
func main() {
os.Getenv("MYSQL_PWD")
err := func() error {
C.mysqldump_database(
C.CString("localhost"),
C.CString("3306"),
C.CString("root"),
C.CString("mysql"),
C.CString("dump.sql"),
C.CString("true"),
);
return nil
}
time.Sleep(time.Duration(250)*time.Millisecond)
if err() == nil {
func() {
C.mysql_restore_database(
C.CString("localhost"),
C.CString("3306"),
C.CString("root"),
C.CString("mysql"),
C.CString("dump.sql"),
C.CString("true"),
);
}()
}
}
运行ruster示例
make run-shared
make run-static
基准测试
./time main_shared
./time main_static
测试
./time test-rust-lib
依赖项
~3–12MB
~114K SLoC