Clace和sqlite-fs:使用SQLite替代文件系统

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 数据库中创建和访问文件

https://www.jdon.com/76137.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/459785.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年10月HarmonyOS应用开发者基础认证全新题库

注意事项:切记在考试之外的设备上打开题库进行搜索,防止切屏三次考试自动结束,题目是乱序,每次考试,选项的顺序都不同 这是基础认证题库,不是高级认证题库注意看清楚标题 高级认证题库地址:20…

HTML3D旋转相册

文章目录 序号目录1HTML满屏跳动的爱心(可写字)2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐

Depcheck——专门用于检测 JavaScript 和 Node.js 项目中未使用依赖项的工具

文章目录 Depcheck 是什麽核心功能📚检测未使用的依赖🐛检测缺失的依赖✨支持多种文件类型🌍可扩展性 安装与使用1. 安装 Depcheck2. 使用 Depcheck Depcheck 的应用总结项目源码: Depcheck 是什麽 来看一个常见错误场景&#x1…

Chrome和Firefox哪款浏览器的密码管理更安全

在当今数字化时代,浏览器已成为我们日常生活中不可或缺的工具。其中,谷歌Chrome和Mozilla Firefox是两款广受欢迎的浏览器。除了浏览网页外,它们还提供了密码管理功能,帮助用户保存和管理登录凭证。然而,关于哪款浏览器…

Camp4-L0:Linux 前置基础

书生浦语大模型实战营Camp4-L0:Linux前置基础 教程地址:https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/linux任务地址:https://github.com/InternLM/Tutorial/blob/camp4/docs/L0/linux/task.md 任务描述完成所需时间闯关任务完成SSH连接与…

C++之多态的深度剖析

目录 前言 1.多态的概念 2.多态的定义及实现 2.1多态的构成条件 2.1.1重要条件 2.1.2 虚函数 2.1.3 虚函数的重写/覆盖 2.1.4 选择题 2.1.5 虚函数其他知识 协变(了解) 析构函数的重写 override 和 final关键字 3. 重载,重写&…

如何从iconfont中获取字体图标并应用到微信小程序中去?

下面我们一一个微信小程序的登录界面的制作为例来说明,如何从iconfont中获取字体图标是如何应用到微信小程序中去的。首先我们看效果。 这里所有的图标,都是从iconfont中以字体的形式来加载的,也就是说,我们自始至终没有使用一张…

Linux shell编程学习笔记87:blkid命令——获取块设备信息

0 引言 在进行系统安全检测时,我们需要收集块设备的信息,这些可以通过blkid命令来获取。 1 blkid命令的安装 blkid命令是基于libblkid库的命令行工具,可以在大多数Linux发行版中使用。 如果你的Linux系统中没有安装blkid命令,…

RuoYi-Vue 使用开发 人员管理-查询功能

说明:这里仅仅开发列表显示 与 查询功能,剩下的添加、修改等可能会遇到报错,后面有机会,会单独写一篇文章教学处理 1.了解开发需求 作为示例的二级开发,这里的人员管理,管理的是 部门信息,员工…

Tomcat 11 下载/安装 与基本使用

为什么要使用Tomcat? 使用Apache Tomcat的原因有很多,以下是一些主要的优点和特点: 1. 开源与免费 Tomcat是一个完全开源的项目,任何人都可以免费使用。它由Apache软件基金会维护,拥有一个活跃的社区,这…

Django入门教程——用户管理实现

第六章 用户管理实现 教学目的 复习数据的增删改查的实现。了解数据MD5加密算法以及实现模型表单中,自定义控件的使用中间件的原理和使用 需求分析 系统问题 员工档案涉及到员工的秘密,不能让任何人都可以看到,主要是人事部门进行数据的…

[ 问题解决篇 ] 解决远程桌面安全登录框的问题

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

微信小程序时间弹窗——年月日时分

需求 1、默认当前时间2、选择时间弹窗限制最大值、最小值3、每次弹起更新最大值为当前时间&#xff0c;默认值为上次选中时间4、 minDate: new Date(2023, 10, 1).getTime(),也可以传入时间字符串new Date(2023-10-1 12:22).getTime() html <view class"flex bb ptb…

【Spring框架】Spring框架的开发方式

目录 Spring框架开发方式前言具体案例导入依赖创建数据库表结构创建实体类编写持久层接口和实现类编写业务层接口和实现类配置文件的编写 IoC注解开发注解开发入门&#xff08;半注解&#xff09;IoC常用注解Spring纯注解方式开发 Spring整合JUnit测试 Spring框架开发方式 前言…

江协科技STM32学习- P24 DMA数据转运DMA+AD多通道

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

【刷题11】CTFHub技能树sql注入系列

整数型注入 看到源码了&#xff0c;直接sql一套秒了 字符型注入 SQL 报错注入 构造payload 1 and (select extractvalue(1,concat(’~’,(select database())))) 后续步骤跟sql基本步骤一样 SQL 布尔注入 人工测试太麻烦&#xff0c;这里直接使用sqlmap,知道这有sql注入漏洞&am…

面试经典 150 题.P26. 删除有序数组中的重复项(003)

本题来自&#xff1a;力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解&#xff1a; class Solution {public int removeDuplicates(int[] nums) …

docker中使用ros2humble的rviz2不显示问题

这里写目录标题 docker中使用ros2humble的rviz2不显示问题删除 Docker 镜像和容器删除 Docker 容器Linux服务器下查看系统CPU个数、核心数、(make编译最大的)线程数总结&#xff1a; RVIZ2 不能显示数据集 docker中使用ros2humble的rviz2不显示问题 问题描述&#xff1a; roo…

ELK + Filebeat + Spring Boot:日志分析入门与实践(二)

目录 一、环境 1.1 ELKF环境 1.2 版本 1.3 流程 二、Filebeat安装 2.1 安装 2.2 新增配置采集日志 三、logstash 配置 3.1 配置输出日志到es 3.2 Grok 日志格式解析 3.2 启动 logstash ​3.3 启动项目查看索引 一、环境 1.1 ELKF环境 springboot项目&#xff1a;w…

基于SSM土家风景文化管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;景点分类管理&#xff0c;热门景点管理&#xff0c;门票订单管理&#xff0c;旅游线路管理&#xff0c;系统管理 前提账号功能包括&#xff1a;系统首页&#xff0c;个人中心&…