amazon-web-services - 具有多个阅读器的 AWS EFS(或网络共享)上的 100GB 只读随机访问 SQLite 文件
问题描述
SQLite 不是为从 EFS(或网络共享)访问而设计的。这是由于性能和数据完整性。在这种情况下,使用的工具需要 sqlite,并且在不久的将来无法更改。
这就是我们所拥有的:
- 1..n 只读访问 SQLite 文件的 docker
- SQLite 文件为 100GB,包含一些非常大的表(>500M 记录)
- 只会读取 SQLite 文件。(数据不变)
- 随机访问读取sqlite数据
EFS 上的 SQLite 文件并安装到机器上的问题:
- 启动 docker 需要 500 秒,而使用本地存储则需要 70 秒。(因此缩放变得更加复杂)
- 多个计算的读取访问最多需要 70 秒,而本地存储则需要 0 秒。
当前解决方案:
- 使用本地存储启动机器
- 将大的sqlite文件复制到本地存储
- 启动泊坞窗
复制需要 700 秒,这意味着启动需要一段时间。此外,每个 docker 都需要额外的本地(临时)存储。运行时所有计算的性能都很好。
问题:
预计 EFS 不会像本地存储一样快,但是由于此设置只需要只读访问权限,因此可以设置几个 sqlite 设置以提高性能。应该设置哪些 sqlite 设置?还是没有办法提高性能,我们目前的解决方案是唯一的吗?
增加 page_size 尚未测试,但可能会提高性能:
PRAGMA page_size = 65536;
由于此设置是只读的,因此以下设置没有任何效果,对吗?:
PRAGMA SYNCHRONOUS = OFF;
PRAGMA journal_mode = PERSIST;
解决方案
推荐阅读
- java - 如何使用 Java Spring Boot 验证用户注册表单?我收到一条错误消息,说 NoMessageFound 错误
- reactjs - 反应路由器:移动到 / 时要定义预期的“状态”
- javascript - 注册新用户的最佳方式是什么 - 获取与发布
- javascript - 无法在 XMLHttpRequest 响应中加载 JavaScript 函数
- python - 是否可以在 GridSearchCV() 中同时使用 MLPRegressor() 和 make_pipeline()?
- spring - 在“mvn clean install”期间的功能测试之前,Wiremock 不会启动
- android - 在不卸载 [INSTALL_FAILED_UPDATE_INCOMPATIBLE] 的情况下将 Android Native 应用程序更新到 Flutter
- javascript - 如何理解 react-three-fiber 中的“useBox”
- blockchain - 无论采用哪种方法,我都无法在 VSCode 中导入 Open Zeppelin 合约
- c - GDB 错误 - 不是可执行格式:文件格式无法识别