AWS EFS(或网络共享)上具有多个读取器的 100GB 只读随机访问 SQLite 文件

Jro*_*Jro 6 sqlite nfs amazon-web-services docker amazon-efs

SQLite 不适合从 EFS(或网络共享)访问。这是由于性能和数据完整性。在这种情况下,使用的工具需要 sqlite,并且在不久的将来无法更改。

这就是我们所拥有的:

  1. 1..n 只读访问 SQLite 文件的 docker
  2. SQLite 文件为 100GB,包含一些非常大的表(>500M 记录)
  3. SQLite 文件将仅被读取。(数据不变)
  4. 随机访问读取sqlite数据

EFS 上并安装到计算机上的 SQLite 文件出现问题:

  • 启动 docker 需要 500 秒,而本地存储则需要 70 秒。(因此缩放变得更加复杂)
  • 多次计算的读取访问最多需要 70 秒,而本地存储则需要 0 秒。

目前的解决方案:

  1. 启动具有本地存储的机器
  2. 将大的 sqlite 文件复制到本地存储
  3. 启动泊坞窗

复制需要700s,这意味着启动需要一段时间。此外,每个码头工人都需要额外的本地(临时)存储。运行时所有计算的性能都很好。

问题:

预计 EFS 不会像本地存储一样快,但是由于此设置仅需要只读访问,因此可能可以设置多个 sqlite 设置来提高性能。应该设置哪些 sqlite 设置?或者是否没有办法提高性能并且我们当前的解决方案是唯一的?

增加 page_size 尚未经过测试,但可能会提高性能:

PRAGMA page_size = 65536;
Run Code Online (Sandbox Code Playgroud)

由于此设置是只读的,因此以下设置没有任何效果,正确吗?:

PRAGMA SYNCHRONOUS = OFF;
PRAGMA journal_mode = PERSIST;
Run Code Online (Sandbox Code Playgroud)