sqlite-zstd

用 Rust 编写的 SQLite 压缩扩展
授权协议 LGPL-3.0
开发语言 Rust
所属分类 数据库相关、 数据库调整和优化
软件类型 开源软件
地区 不详
投 递 者 姚俊贤
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

sqlite-zstd 是 SQLite 的扩展,为 SQLite 提供透明的基于字典的行级压缩。这允许你压缩 SQLite 数据库中的条目,就像你压缩整个数据库文件一样,但同时保留了随机访问。

根据不同的数据,这可以将数据库的大小减少 80%,同时保持大部分的性能不变(甚至可以提高性能,因为从磁盘上读取的数据更小)。

编译

该项目可以以两种模式构建:

  • 作为 Rust 库
  • 作为纯 SQLite 扩展

可以从 GitHub release 中获取 SQLite 扩展二进制文件,或者可以手动构建扩展:

cargo build --release --features build_extension
# should give you target/release/libsqlite_zstd.so

用法

可以将此库作为 SQLite 扩展或作为 Rust 库加载。 请注意,sqlite 扩展不是持久的,因此每次连接数据库时都需要加载它。

Sqlite CLI

在 REPL 中加载它:

$ sqlite3 file.db
SQLite version 3.34.0 2020-12-01 16:14:00
sqlite> .load .../libsqlite_zstd.so
[2020-12-23T21:30:02Z INFO  sqlite_zstd::create_extension] [sqlite-zstd] initialized
sqlite>

或者:

sqlite3 -cmd '.load libsqlite_zstd.so' 'select * from foo'

C API

int success = sqlite3_load_extension(db, "libsqlite_zstd.so", NULL, NULL);

Rust

推荐的方法是添加 sqlite_zstd作为项目的依赖项,然后使用

let conn: rusqlite::Connection;
sqlite_zstd::load(&conn)?;

或者,也可以像任何其他扩展一样加载扩展:

let conn: rusqlite::Connection;
conn.load_extension("libsqlite_zstd.so", None)?;
  • 用 Rust 扩展 SQLite 作为进程内数据库,SQLite 具有其他扩展机制,例如 用户定义函数(简称 UDF)。但是UDF有一些缺点: UDF 在 SQLite 连接中是当前生效的,而不是为所有连接共享; UDF 必须在程序中定义。这意味着您需要在与您的应用程序相同的作用域内使用该功能。 这就是 UDF 的用武之地。UDF 可以用任何可以编译为共享库或者 DLL 的编程语言编写。然后,您可

 相关资料
  • SQLite 3.9 版本以后天加了 JSON1 扩展,并且新增了 FTS5 全文搜索。FTS5 提高了复杂搜索的请求效率,并自带了 BM25 算法实现。 安装 首先确保你的 SQLite 安装了 JSON1 和 FTS5 扩展: 如果没有可以重新安装:brew uninstall --ignore-dependencies sqlite3; brew install sqlite3 --with

  • SQLite是一种基于模式的轻量级关系数据库引擎。 它是用于Web浏览器中本地存储的嵌入式数据库软件的流行选择。 与许多其他数据库管理系统不同,SQLite不是客户端 - 服务器数据库引擎。 有关更多信息,请阅读我们的 SQLite教程 在本章中,您将学习如何使用CoffeeScript与SQLite数据库进行通信。 安装 (Installation) 可以使用node-sqlite3模块将SQL

  • Peewee数据库对象在线程之间共享。我假设这意味着数据库连接也是共享的。 我找不到一个具体的答案,所以我在这里问。

  • 我将开始使用PyQt5及其sqlite的Sql类。我想将扩展加载到sqlite中。为此,必须在运行时为sqlite启用扩展加载。在python模块sqlite3中,这是通过enable_load_扩展启用的。 在C中,句柄可以这样获得(取自https://doc.qt.io/qt-5/qsqldriver.html#handle): python的等价物是 作为旁注,在Pyside2中,handl

  • SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。 Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。 在使用SQLite前,我们先要搞清楚几个概念: 表是数据库中存放关系数据的集合,一个数据库里面通常都包含多

  • SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。 Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。 在使用SQLite前,我们先要搞清楚几个概念: 表是数据库中存放关系数据的集合,一个数据库里面通常都包含多