Checksum-Based存储实现
以下部分提供关于如何在Artifactory中实现基于校验和的存储特性的更多信息。
重复数据删除
Artifactory只存储一次任何二进制文件。这就是我们所说的“一次且仅一次存储”。第一次上传文件时,Artifactory在存储文件时运行所需的校验和计算,但是,如果再次上传文件(例如,上传到不同的位置),则上传将作为一个简单的数据库事务实现,该事务创建另一个记录,将文件的校验和映射到它的新位置。实际上,不需要将文件再次存储到存储器中。无论文件上传了多少次,文件存储区都只保存该文件的一个副本。
复制和移动文件
复制和移动文件是通过简单地添加和删除数据库引用来实现的,相应的,这些操作的性能与数据库事务的性能相同。
删除文件
删除文件也是一个简单的数据库事务,其中相应的数据库记录将被删除。即使删除了指向文件的最后一个数据库条目,也不会直接删除文件本身。所谓的“孤立”文件被Artifactory的垃圾收集进程在后台删除。
上传、下载和复制
在将文件从一个位置移动到另一个位置之前,Artifactory会发送校验和头。如果文件已经存在于目标中,则即使它们存在于不同的路径下也不会被传输。
文件系统性能
文件系统的性能得到了极大的提高,因为文件存储上的操作是作为数据库事务实现的,因此不需要在文件系统上执行写锁。
校验和搜索
通过校验和搜索文件非常快,因为Artifactory实际上是在数据库中搜索指定的校验和。
灵活的布局
由于数据库是文件存储和显示布局之间的间接层,所以可以支持任何布局,无论是标准打包格式,如Maven1、Maven2、npm、NuGet等,还是任何自定义布局。