#sqlite #binary #binary-format #table #file #schema #serverside

sqlighters

轻松为服务器端应用程序创建 SQLite 二进制格式,通常客户端在 WASM 中运行 SQLite

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