网站首页 > 开源技术 正文
Clace和sqlite-fs都利用 SQLite 提供取代传统文件系统的创新解决方案,每种解决方案都适用于不同的用例。
Clace 概述
Clace 是一个专为内部工具设计的 Web 应用部署平台,允许开发人员在一台机器上安全地托管多个应用程序。主要功能包括:
- 跨平台兼容性:适用于 Linux、Windows 和 macOS。
- GitOps 工作流:方便从 GitHub 存储库直接部署,无需构建步骤。
- 容器管理:使用Docker或Podman管理应用程序容器。
- 超媒体应用程序:支持使用无需容器的 Starlark 构建应用程序。
- SQLite 持久性:利用 SQLite 实现应用程序数据持久性,并维护由 SQLite 数据库支持的虚拟文件系统,从而实现高效的静态内容缓存
Clace 的特点
- 原子更新:确保跨多个应用程序的更新要么完全完成,要么根本不完成。
- 暂存模式:允许在正式上线之前测试代码和配置更改。
- OAuth 身份验证:为应用程序提供安全的访问控制。
- 性能增强:包括静态资产的 Brotli 压缩和自动 SSL 证书创建
使用 SQLite 提供文件服务
对于 Clace,决定使用SQLite来存储应用文件,而不是使用文件系统。这样做的主要原因是为了能够进行原子版本更改。在更新应用时,由于可能会更新大量文件,因此使用数据库将允许在事务中原子地完成所有更改。这将防止在版本更改期间提供损坏的网页。
Clace 在应用程序创建和更新期间将所有文件上传到 SQLite 数据库。文件从 GitHub 或本地磁盘上传。仅在开发模式下,才使用本地文件系统。
使用 SQLite 的好处
决定使用 SQLite 进行文件存储提供了许多额外的好处(有些是意料之外的)。
事务更新:这是主要的好处。可以在一个事务中更新多个文件。隔离可确保更新期间不会出现任何损坏的 Web 应用程序。
部署回滚:事务的另一个好处是能够在出现错误时回滚部署。如果要更新多个应用程序,则可以一次性回滚所有应用程序。回滚数据库事务比清理文件系统上的文件要容易得多。
跨版本文件重复数据删除:Clace 自动对所有更新进行版本控制。这可能会导致大量重复文件。文件数据存储在具有以下架构的表中
CREATE TABLE files (sha text, compression_type text, content blob, create_time datetime, PRIMARY KEY(sha));
未压缩内容的 SHA256 哈希用作存储文件数据的主键。这意味着即使应用程序的多个版本具有相同的文件,文件内容也只会存储一次。
跨应用程序去重复:Clace 中的每个生产应用程序都有一个暂存应用程序。 应用程序可以有多个预览应用程序。 这会导致大量文件重复。 使用数据库有助于避免所有重复。 即使在不同的应用程序中,也会有内容相同的文件。 跨应用程序的文件也会被去重。
轻松备份: 使用 SQLite 意味着备份非常简单。 使用 Litestream 等 SQLite 备份工具,可以轻松备份整个系统、元数据和文件的状态。
内容加密:为了在浏览器上实现内容缓存,网络服务器会返回一个 ETag 标头。 使用文件数据库可以在上传文件时轻松保存一次 SHA 内容,而无需稍后重新计算。
压缩: 文件内容经 Brotli 压缩后保存在 SQLite 表中。 数据库方法的优点是可以轻松地以多种格式保存内容。 只需在文件表中添加一列,即可添加 GZip 压缩数据和未压缩数据。
性能
对于 Clace 来说,SQLite 数据库方法提供了出色的性能。没有使用文件系统的等效实现可供比较,因此没有进行直接基准测试。根据SQLite 团队进行的基准测试,对于某些工作负载,SQLite 的性能可能比直接使用文件系统更好。
多节点支持
Clace 目前在单个节点上运行。当稍后添加多节点支持时,计划使用共享 Postgres 数据库,而不是使用本地 SQLite 来存储元数据和文件数据。这将带来延迟问题。计划使用本地 SQLite 数据库作为文件缓存,以避免访问 Postgres 时出现延迟。
为什么这种方法不那么普遍?
大多数 Web 服务器使用文件系统的原因之一是方便。可以使用任何文件系统工具进行文件更新:rsync、tar 等可用于复制文件。另一个原因可能是历史原因:在出现良好的进程内关系数据库之前,人们使用的是文件系统。使用数据库意味着需要某种 API 接口来上传文件,但这并不总是可行的。
sqlite-fs 概述
另一方面,sqlite-fs 是一款允许用户在 Linux 和 macOS 上将 SQLite 数据库挂载为传统文件系统的工具。该项目对于想要直接在数据库环境中管理文件的用户特别有用。
sqlite-fs 的功能
- 文件系统操作:支持标准文件系统操作,例如创建、读取、写入、删除文件和目录。
- 内存数据库选项:用户可以选择临时的、卸载后不会持久存在的内存数据库。
- 与 FUSE 集成:利用 FUSE(用户空间文件系统)创建虚拟文件系统接口
示例用法
要将 SQLite 数据库挂载为文件系统,用户可以执行:
sqlite-fs ~/mount ~/filesystem.sqlite &
echo "Hello world!" > ~/mount/hello.txt
cat ~/mount/hello.txt
此示例演示了如何轻松地在已挂载的 SQLite 数据库中创建和访问文件
猜你喜欢
- 2024-11-12 开源云盘利器:Nextcloud 21私有云盘搭建
- 2024-11-12 三步完成测试监控系统搭建(监控摄像机测试方案)
- 2024-11-12 移动开发工具Xamarin.Android更新至6.1.2
- 2024-11-12 .NET 6 Minimal API程序中使用EF Core访问SQLite数据库实例教程
- 2024-11-12 分享一款PG管理工具--pgadmin,一个类似PLSQL功能的工具
- 2024-11-12 关于Android系统框架的核心组成部分,你知道多少?
- 2024-11-12 「asp.net core 系列」8实战之利用EF Core 实现数据操作层
- 2024-11-12 从失败到成功:如何在C#中删除SQLite数据库文件
- 2024-11-12 在 C# 中,保存和读取应用程序的默认值(或设置)的多种方法
- 2024-11-12 NetCore使用Sqlite数据库入门基础
你 发表评论:
欢迎- 03-19基于layui+springcloud的企业级微服务框架
- 03-19开箱即用的前端开发模板,扩展Layui原生UI样式,集成第三方组件
- 03-19SpringMVC +Spring +Mybatis + Layui通用后台管理系统OneManageV2.1
- 03-19SpringBoot+LayUI后台管理系统开发脚手架
- 03-19layui下拉菜单form.render局部刷新方法亲测有效
- 03-19Layui 遇到的坑(记录贴)(layui chm)
- 03-19基于ASP.NET MVC + Layui的通用后台开发框架
- 03-19LayUi自定义模块的定义与使用(layui自定义表格)
- 最近发表
-
- 基于layui+springcloud的企业级微服务框架
- 开箱即用的前端开发模板,扩展Layui原生UI样式,集成第三方组件
- SpringMVC +Spring +Mybatis + Layui通用后台管理系统OneManageV2.1
- SpringBoot+LayUI后台管理系统开发脚手架
- layui下拉菜单form.render局部刷新方法亲测有效
- Layui 遇到的坑(记录贴)(layui chm)
- 基于ASP.NET MVC + Layui的通用后台开发框架
- LayUi自定义模块的定义与使用(layui自定义表格)
- Layui 2.9.11正式发布(layui2.6)
- Layui 2.9.13正式发布(layui2.6)
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)