SQLite 数据库中的压缩 .Net C#

问题描述 投票:0回答:2

BLOB(或任何其他数据)可以(即时)压缩到 SQLite3 数据库中吗? 我在 C# 中使用 System.Data.SQLite,目标是 .net 3.5。

在我的搜索中,我不断看到像这样的连接字符串...... “数据源=base.db;版本=3;压缩=true;”

但是我找不到有关 compress=true 的信息,我已将其添加到我的连接字符串中进行测试,并将文件添加为 BLOB 数据,但似乎没有压缩,我已经使用大型文本文件进行了测试,所以没有已经压缩的图像或其他文件。

sqlite compression
2个回答
3
投票

据我所知,System.Data.SQLite.SQLiteConnection 字符串中的“compress=True”参数没有被考虑在内。

基本上,它有点无用:没有为 .NET System.Data.SQLite 提供内置压缩。

为了将一些压缩功能引入 System.Data.SQLite 世界,您基本上有两个选择:

  • 使用一些第三方工具,无论是包含其中一个 C 库并基于它重建 System.Data.SQLite: 专有 SQLite 扩展:SEE、CEROD、ZIPVFS / SQLite Crypt / 等。商业 ORM基于 ADO.NET 的 Devart 支持我刚才提到的加密选项,并且似乎可以无缝使用它们(尽管我个人从未尝试过那么多使用 Devart)。
  • 围绕 System.Data.SQLite 创建包装器:是否使用有关封装数据的某些标头转换所有数据,并使用具有 blob 数据亲和力的某些字节集合插入所有内容。顺便说一下,您还可以同时提供一些额外的加密过程。当然,这将比可用的 C 第三方库慢得多,并且根据您的要求(插入、更新等)可能还不够。 ,删除速度),但至少这是免费(且耗时)的方法。这可以通过特定的 SQLite ORM 来实现,实现起来应该不难,但相当耗时。

0
投票

我最近创建了一个 sqlite-compressions 扩展,它将

gzip
brotli
压缩、解压和测试功能添加到 sqlite 作为扩展(或者您可以直接从 Rust 代码中使用它)。加上另一个扩展中的许多哈希函数。

这将允许您使用 SQL 插入和检索原始数据,同时将其存储为 gzip 或 brotli blob:

  • INSERT INTO table (..., myblob) VALUES (..., gzip(?))
  • SELECT gzip_decode(myblob) FROM table
© www.soinside.com 2019 - 2024. All rights reserved.