我的 Workouts Page 项目使用的是 SQLite,轻量、方便。大概5年前接触了SQLite,用来存放我的跑步数据,刚看了下我从18年到现在的数据有了 2M多,一直认为 SQLite 通常存放的时间是M级别,今天在迁移 iCloud 的照片的时候又进一步的认识了,我本地图片用到的 SQLite 达到接近2G。于是问了下AI,SQLite 支持的最大数据量是多少,给出的答案如下:

SQLite 理论上的最大数据库大小大约是 **140 TB (太字节)**。

这是基于其内部架构计算得出的:

  • SQLite 数据库由页面(Page)组成,每个页面的最大尺寸是 65,536 字节
  • 数据库文件最大可以包含大约 231 (2147483646) 个页面

将两者相乘:

65536 字节/页×2147483646 页≈140 TB


实际考量

虽然理论上限很高,但在实际应用中,你更可能遇到其他限制:

  1. 文件系统限制: 许多操作系统和文件系统对单个文件的大小有限制(例如,早期的 FAT32)。虽然现代文件系统(如 NTFS、ext4)支持更大的文件,但实际的限制可能会低于 140 TB。
  2. 存储硬件限制: 你的硬盘或 SSD 的实际容量会成为更直接的瓶颈。
  3. 性能: 当数据库文件达到数十 GB 甚至数百 GB 时,性能可能会成为一个问题。虽然 SQLite 在处理中小型数据库时非常高效,但对于巨大的单文件数据库,你可能会发现客户端/服务器架构的数据库(如 PostgreSQL、MySQL、SQL Server)在并发写入和大规模数据检索方面表现更佳。

总结:

SQLite 官方设计的理论上限高达 140 TB,但对于大多数日常应用和设备而言,你可能只需关注它在 GB 甚至数百 GB 级别仍能保持良好运行的实际能力。

由于近期iCloud 的土耳其区2TB 的iCloud+ 订阅服务已上涨至399.99 里拉,这一价格约合人民币70 元,已经没有了任何优势,于是要迁移iCloud的数据,经过查看发现大部分都是照片占用的。

d

由于本地1T的磁盘已经完全 不够用了,要把照片迁移到nas,在迁移的时候发现mac 上的照片的app 竟然也是用了 SQLite,而且还挺大,达到了惊人的接近2G的数据量。

image-20251010221639228

照片的原始记录 有400G接近,没想到元数据信息竟然有2G。

简单查看了数据内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
~ sqlite3  Photos\ Library.photoslibrary/database/Photos.sqlite
SQLite version 3.43.2 2023-10-10 13:08:14
Enter ".help" for usage hints.
sqlite> .headers on
sqlite> .mode column
sqlite> .tables
ACHANGE
ATRANSACTION
ATRANSACTIONSTRING
ZADDITIONALASSETATTRIBUTES
ZALBUMLIST
ZASSET
ZASSETANALYSISSTATE
ZASSETCONTRIBUTOR

把这些信息丢给AI:这些大概的用途是什么?

image-20251010222059085

没想到的是,苹果的风格竟然也是以 Z 开头。

简单记录:迁移接近400G 照片,由于数据较大,直接cp到nas,出现多次中断的情况,后来才有了 使用了 rsync 方案。

3/3EEF370C-5CFF-450B-A85F-9B11DD378D5D.png
1944856 100% 2.64MB/s 0:00:00 (xfer#53, to-check=215/3272)
3/3EF1CDD0-2F8A-44CD-BD85-099C1815E6EE.jpeg
369003 100% 248.35kB/s 0:00:01 (xfer#54, to-check=214/3272)
3/3EF4E69C-B182-4094-8E00-F23B73AB9AF3.jpeg
3060338 100% 4.07MB/s 0:00:00 (xfer#55, to-check=213/3272)
3/3EF4E69C-B182-4094-8E00-F23B73AB9AF3_3.mov
5643852 100% 12.16MB/s 0:00:00 (xfer#56, to-check=212/3272)
3/3EF5BEAE-473E-48C1-8038-62EC9E2F22EF.heic
2353531 100% 12.36MB/s 0:00:00 (xfer#57, to-check=211/3272)
3/3EF5ED84-6E51-4993-9CA2-2A3B43AFCACA.jpeg
3472878 100% 2.29MB/s 0:00:01 (xfer#58, to-check=210/3272)
3/3EF7E989-B487-44AB-B7A8-0729CA0782B3.jpeg
3252008 100% 2.16MB/s 0:00:01 (xfer#59, to-check=209/3272)
3/3EF7E989-B487-44AB-B7A8-0729CA0782B3_3.mov
4604340 100% 3.63MB/s 0:00:01 (xfer#60, to-check=208/3272)
3/3EF8C1DC-560F-4732-BB6E-8C9BC01B9D45.mov
123502592 12% 6.34MB/s 0:02:07

速度还可以,开了10个进程并发,nas的CPU负载 50%左右,每个进程的速度稳定在 10M左右。当然是得大文件,小文件很慢的。

原文作者: liups.com

原文链接: http://liups.com/posts/a7f4c375/

许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议