我有一个 7GB 的 SQLite 文件,我正在从云中的不同虚拟机对它运行多个查询。一些查询使用内置的 sqlite3 包在 Python 中运行,而其他查询则源自在 DB Visualizer 中运行的 SQL 查询。文件本身位于网络共享上(出于政策原因,无法在本地复制)。
这些并发查询会互相减慢速度吗?
我可以在网络共享上多次复制 SQLite 文件,并将每个并发查询连接到它自己的文件副本。这会加快速度吗?
我可以想象 sqlite3 Python 驱动程序和 DBVisualizer 首先将数据库文件复制到本地临时存储(或内存中),在这种情况下不会获得加速,或者它们不会。
并发不是问题,只要你只读。SQLite 不允许写入并发,因为它从来不是为此而设计的。我不知道 python 驱动程序和 DBVisualized 的内部结构,但希望 smb、您的操作系统和任何中间件都能自动缓存至少部分文件,因为除非有要求,否则它会自动完成以加快文件系统访问。详细信息将取决于操作系统配置和访问详细信息。
我想评论一些你没有问过的东西,这是你的架构的契合度:
(这些只是从您的问题中了解到的那些)
SQLite 是一款很棒的软件,但请考虑它是否适合您,因为这几乎是什么时候不使用它的典型案例。当然,您可以创建一个循环设备并将其复制到内存中,您可能会得到一些改进,但您也可以迁移到具有集成缓存系统的分布式系统(如任何其他多用户关系数据库),并让技术解决所有这些问题都为您解决。
使用网络共享访问 sqlite 确实是一种黑客行为,众所周知,网络文件系统由于其对写入一致性的限制而导致数据丢失。