1 个不稳定版本
0.1.0 | 2023 年 4 月 12 日 |
---|
#2143 在 数据库接口 中
28KB
708 行
Sqlighte.Rs
Sqlighter
- 受 .Net blazor 中的一个新功能启发(见 https://www.youtube.com/watch?v=lP_qdhAHFlg&t=300s)
- 从任何表格数据创建 SQLite 数据库文件。
- 因此,而不是通过 REST API 提供 JSON,它允许以原生 SQLite 格式下载数据
- 这样,在 WASM(即浏览器)中运行的 SQLite 可以用于查询数据。
为什么不使用官方的 SQLite 库在服务器端进行此操作呢?
这是一个非常好的问题!
但是,我必须首先创建一个 SQLite 数据库,用结果填充它,然后加载数据库文件,为 HTTP 请求提供服务。虽然这也应该可行,但听起来更复杂。在 Sqlighter 中,数据保留在内存中。(是的,如果数据真的很大,这会成为一个问题;考虑将其卸载到文件)
适用场景
-
当你有相当多的(表格)数据,它是只读的,或者不需要是(超)实时的时候。
-
并且你的用户需要快速应用不同的搜索条件。
-
使用 Sqlighter 可以避免服务器往返,并提高用户体验。
-
请注意,虽然作为开发人员,您不能直接读取有效载荷,就像 JSON 允许的那样,但 SQLite 几乎在任何平台上都可用,然后您可以利用 SQL 的强大功能来检查数据。
-
注意事项:Sqlite 在模式验证方面非常宽松。这意味着同一表中的两条记录可以包含完全不同类型的值(!)数值的数量也可以不同。所有这些在 Sqlighter 的角度来看都是合法的。也许在将数据写入 SQLite 本身时不是这样,但完全可以读得出来!
关于名称
- 它照亮了一个 SQLite 数据库 :)
创建数据库就像
fn test_build() -> Result<(), Error> {
let mut builder = Builder::new();
builder.schema(
"foo",
"create table foo(bar varchar(10))",
);
let mut record = Record::new(1);
record.add_value(values::string("helloworld"));
builder.add_record(record);
let database: Database = builder.into();
let file = File::create("foo.db")?;
let writer = BufWriter::new(file);
write_sqlite(database, writer)?;
Ok(())
}
请注意
- 模式和实际数据不必匹配!但是,SQLite 本身也大致是这样工作的。
- 还有:同一表中的两条记录可以包含完全不同类型的值(!)数值的数量也可以不同。所有这些在 Sqlighter 的角度来看都是合法的。也许在将数据写入 SQLite 本身时不是这样,但完全可以读得出来!
- unittest SchemaCreationTests 是这个的证明。
当前状态
- 它适用于任何大小的表,但可能不适用于索引(可能会跳过这个功能),因为您始终可以在客户端添加它们(!)
依赖项
~115KB