JFrog帮助中心

我们的新门户即将推出!
文档+知识库





JFrog帮助中心-新的知识体验即将到来!



基于校验和的存储概述

Artifactory使用基于校验和的存储唯一地存储工件。

上传到Artifactory的文件首先计算其SHA1校验和,然后将其重命名为其校验和。然后将其托管在配置的文件存储库中,该目录结构由校验和的前两个字符组成。例如,校验和为“ac3f5e56…”的文件将存储在目录“ac”中;校验和为“dfe12a4b…”的文件将存储在目录“df”中,以此类推。下面的示例显示了包含两个校验和以“d4”开头的文件的“d4”目录。

同时,Artifactory创建一个数据库条目,将文件的校验和映射到存储库中上载到的路径。这种存储二进制文件的方式优化了Artifactory中的许多操作,因为它们是通过简单的数据库事务实现的,而不是实际操作文件。

页面内容


基于校验和的存储实现

以下部分提供了关于如何在Artifactory中实现基于校验和的存储特性的更多信息。

重复数据删除

Artifactory只存储一次二进制文件。这就是我们所说的“一次且仅一次存储”。第一次上传文件时,Artifactory在存储文件时运行所需的校验和计算,但是,如果再次上传文件(例如,上传到不同的位置),则上传被实现为一个简单的数据库事务,该事务创建另一个记录,将文件的校验和映射到它的新位置。实际上不需要将文件再次存储在存储器中。无论上传文件多少次,文件存储库都只承载该文件的一个副本。

复制和移动文件

复制和移动文件是通过简单地添加和删除数据库引用来实现的,相应地,这些操作的性能是数据库事务的性能。

删除文件

删除文件也是一个简单的数据库事务,其中删除相应的数据库记录。文件本身不会被直接删除,即使指向它的最后一个数据库条目被删除。所谓的“孤儿”文件在后台被Artifactory的垃圾收集进程删除。

上传、下载和复制

在将文件从一个位置移动到另一个位置之前,Artifactory发送校验和头。如果这些文件已经存在于目标中,那么即使它们存在于不同的路径下,也不会传输它们。

文件系统性能

文件系统的性能得到了极大的提高,因为文件存储库上的操作是作为数据库事务实现的,因此不需要在文件系统上执行写锁。

校验和搜索

通过校验和搜索文件非常快,因为Artifactory实际上是在数据库中搜索指定的校验和。

灵活的布局

由于数据库是文件存储和显示布局之间的间接层,因此可以支持任何布局,无论是标准打包格式之一,如Maven1, Maven2, npm, NuGet等,还是任何自定义布局。

版权所有©2023 JFrog Ltd.