资源库、资源束、关联文件夹等概念及Picsee存储结构浅析
2022-02-15

Picsee怎么管理组织图片、视频等媒体素材的呢?......

# 实体关联关系

  • 通过资源库、资源束、关联文件夹等实体组织管理媒体素材。
  • 关联文件夹其实就是操作系统上的文件夹,引用关联到Picsee内部,叫关联文件夹。因此,关联文件夹包含图片、视频等媒体素材文件、以及它的子文件夹。这样就形成了Picsee内部可见的树状层次结构。
  • 资源束包含关联文件夹;资源库包含资源束。层级逐次往上,一个资源束对多个关联文件夹,一个资源库对多个资源束。
  • 智能文件夹、智能任务、堆栈等都建立在资源束内部,是对被管理素材另一个维度的组织和呈现。

library_bundle_folder

# 程序执行包和数据位置

第一次下载安装Picsee,打开Picsee后,程序会自动在应用程序数据目录下建立一个默认的资源库和资源束,并加载显示。应用程序数据目录并不在Picsee应用程序所在的目录:/Applications/Picsee.app,那只是程序代码包所在的位置。而是在:‌/Users/替换成你自己计算机用户名/Library/Containers/me.zhiquan.mac.Picsee/

default_library_bundle_location

其实,Picsee运行所依赖的数据环境基本上都在:**‌/Users/替换成你自己计算机用户名/Library/Containers/me.zhiquan.mac.Picsee/**下。如果删除整个目录,相当于重置Picsee的本地运行环境,包括配置参数。有同学想重置Picsee,删除/Applications/Picsee.app, 再下载安装,其实是行不通的,因为这只是改变的程序执行包,Picsee执行所依赖的数据是没变。

# 索引文件结构和位置

当你在Picsee添加了关联文件夹后,程序会在后台适时解析文件夹的层次结构和存储的内容,建立索引,分析素材属性元数据进行存储,并监控关联文件夹的变化,实时与系统上的文件夹保持一致。当你在Picsee中浏览图片、视频等媒体时,会根据建立的索引,计算存储路径,素材尺寸,实时生成合适尺寸的缩略图进行显示。那么,这一个过程中建立的索引文件存放位置在哪里,结构是怎么样的呢?

索引文件的结构和位置根据Picsee偏好设置中索引文件位置配置是相对于资源库,还是相对于应用文件夹设置的不同,而不同。Picsee默认配置为相对于资源库,先介绍下这种情况。

index_location_config

# 索引文件相对于资源库

这一情况下,资源库包下有四个文件夹,分别为local, cloud, backup, thumbnail,其中local目录罗列各个资源束的本地索引,每个资源束对应一个文件夹,在每个文件夹下,都有四个文件夹,分别为config, entity, trash, unclassified。如下图所示,图中*.realm结尾的文件是数据库文件,可以用Realm Studio (opens new window)工具打开查看,下面说明下每个文件夹的用途作用情况。

library_folder_relativeToLib

  • local:存放资源束从关联文件夹、图片素材等中解析出来的属性字段,包括文件夹的层次结构,路径,图片大小,尺寸,地理位置,名称,拍摄信息等字段。这个文件夹强调的是本地的概念,基本上可以通过重新绑定位置重新构建资源束等操作重新生成的。多个资源束不共用,分别有自己独立的文件夹,以资源束的Id命名。
  • cloud: 存放标签、备注、标星、智能文件夹、智能任务,关联文件夹的引用等信息。这些信息基本上都是用户输入的信息,单独放置,利于多台机器之间,不同库之间通过iCloud同步使用。这些信息非常重要,不能通过解析图片素材/文件夹重新获取。多个资源束共用。
  • backup: 存放该资源库关键节点操作的历史记录,采用git进行版本管理,是对cloud.realm中文档对象的序列化历史记录,多个资源束共用,可重置。其实就是一个git仓库,可以在**.../backup/libraryId/gitback/**目录下,使用git命令行工具查看历史,不过恢复到某个操作节点需要到Picsee的偏好设置里进行,以保证相关数据的一致性。
  • thumbnail: 存放该资源库图片、视频素材的缩略图文件,多个资源束共用,可清空重置。缩略图文件是在解析素材颜色/计算文件MD5的过程中、或者在界面上浏览素材时生成的。由于解析素材的颜色耗时比较长,因此,在添加关联文件夹后,时常让人感觉运行慢。追求速度效率的,可以选择在偏好设置中关闭素材颜色分析,以提高速度。
  • config: 存放的是相应资源束的配置信息,例如关联文件夹的文件路径。关联文件夹在Picsee中是比较重要的一个实体,它是管理素材的基石, Picsee是通过它来管理本地素材的,也是通过它作为锚点来实现多机多库之间资源束的同步的。加载某个资源束后,首先从cloud.realm中读取该资源束的关联文件夹的引用,再从localConfig.realm中获取关联文件夹的文件路径。关联文件夹可以在Picsee外进行移动[不过,不建议这么做],关联文件夹也有可能失效,这时你可以重新绑定位置或者修复绑定位置重新绑定位置相当于重新关联,相当于该文件夹会重新扫描分析;修复绑定位置只重新设置关联文件夹的存储路径位置。
  • entity: 存放的是相应资源束的素材文件、文件夹的解析信息,例如图片名称,大小、尺寸、格式、GPS、EXIF等。
  • trash: 指相应资源束的回收站,可重新绑定位置。
  • unclassified: 指相应资源束的未分类,可重新绑定位置。

从中可以看出,在索引文件相对于资源库情况下,资源库关联文件夹可以找到相对应的实体对象,分别为.picsLibrary文件和Finder中的文件夹,而资源束没有实体的概念,完全融入到了各个文件夹和数据库文件(.realm)中。

# 索引文件相对于应用文件夹

这种情况下,本地索引(local目录下的内容)和缩略图文件夹thumbnail放到了Picsee应用程序的数据目录下,默认资源库(.picsLibrary)放置在Album目录下,资源库保留了cloud和backup文件夹。如下图所示。

library_folder_relativeToApp

文件夹cloud, backup, thumbnail, 本地索引(config, entity, trash, unclassified)存放的内容与结构与索引文件相对于资源库中描述一致。区别在于,现在thumbnail目录在多个资源库之间共享,thumbnail和本地索引不随资源库的移动而移动,是固化在Picsee的应用程序数据目录下。此时,资源库只有backup和cloud文件夹,比较轻量,移动方便,但是缺少本地索引和thumbnail,缺少自洽的数据。如果资源库移动到其他计算机上用Picsee打开的,需重新绑定关联文件夹,并进行构建本地索引,并浏览图片/视频素材等时,也会重新生成缩略图。

# 第三种索引文件结构和位置

Picsee 1.4.5及之前的版本,和在此基础升级上来的,旧的索引文件的结构和位置,与上述两种描述的都不同,其与索引文件相对于应用文件夹情况相差无几,在这里就不赘述了。

# 总结

Picsee索引文件的结构和位置,完全是公开的,包括数据库文件里的存储信息字段,目前完全可以用工具打开查看,未进行加密和混淆,有兴趣的同学,可以基于此,做一些二次开发和利用。这样的索引文件结构的设计,完全是出于对备份、云同步、多机使用、移动拷贝资源库分享、素材文件多机引用使用、以及轻量开放等多方面考量上妥协和平衡。