mastodon(或者说gem paperclip)一个恶心的地方是储存媒体文件时要把activity record id拆分成了一大串子目录:如图1的文件,其原本的id是104530971904218116,最后被拆成了104/530/971/904/218/116 (:id_partition部分)
我想不出这样设计有什么意义,但是最终的结果是list对象储存时会产生大量性格最贵的C类请求。misskey是将所有文件储存在根目录,list n个文件产生n次C类请求,这是最理想的情况,但是同样的n个文件mastodon要产生n*(6+2)次C类请求,+2是因为104/530/971/904/218/116 下面还有original和small两个子文件夹。
打算趁这次重构的机会把这个地方改一下,直接把所有内容写在文件名上不就行了:
':prefix_url:class/:attachment/:id_partition/:style/:filename' -> ':prefix_url:class/:attachment/:id-:style-:filename'
@lgE 懂了,要实现是可以的,不过我估计这种需求除非有现成的pr,否则G大是不会花精力去做的
@lgE 我原来还以为s3服务商会自动帮我们做prefix优化
@mashiro 不直接用id作为文件名可能也与s3性能有关:https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance.html
media_attachments/thumbnails/ 有些是来自外站然后在本地生成的文件
我说的分开配置是/local/accounts/...和/cache/accounts/...。现在根目录一个accounts/加上cache/accounts/,导致写本地备份的程序不是那么方便,要枚举或者排除(有软件排除的运行效率很低)。更方便的就是我之前说的,分别设置存储,一个local一个s3,或者是不同的s3桶。搜了搜,看来有人提过 https://github.com/mastodon/mastodon/issues/12382 。