多个并发连接到网络共享上的同一个大型 SQLite 文件

dum*_*dad 3 sqlite

我有一个 7GB 的 SQLite 文件,我正在从云中的不同虚拟机对它运行多个查询。一些查询使用内置的 sqlite3 包在 Python 中运行,而其他查询则源自在 DB Visualizer 中运行的 SQL 查询。文件本身位于网络共享上(出于政策原因,无法在本地复制)。

这些并发查询会互相减慢速度吗?

我可以在网络共享上多次复制 SQLite 文件,并将每个并发查询连接到它自己的文件副本。这会加快速度吗?

我可以想象 sqlite3 Python 驱动程序和 DBVisualizer 首先将数据库文件复制到本地临时存储(或内存中),在这种情况下不会获得加速,或者它们不会。

jyn*_*nus 6

并发不是问题,只要你只读。SQLite 不允许写入并发,因为它从来不是为此而设计的。我不知道 python 驱动程序和 DBVisualized 的内部结构,但希望 smb、您的操作系统和任何中间件都能自动缓存至少部分文件,因为除非有要求,否则它会自动完成以加快文件系统访问。详细信息将取决于操作系统配置和访问详细信息。

我想评论一些你没有问过的东西,这是你的架构的契合度:

  • 您需要通过网络访问数据库
  • 你需要有一定的并发性
  • 您需要控制访问,因为政策原因(可能其中一些政策原因可能是备份)
  • 你对性能有期望
  • 您需要以更细粒度的方式控制内存和磁盘上的内容
  • 您的数据库已经超出了微不足道的大小

(这些只是从您的问题中了解到的那些)

SQLite 是一款很棒的软件,但请考虑它是否适合您,因为这几乎是什么时候不使用它的典型案例。当然,您可以创建一个循环设备并将其复制到内存中,您可能会得到一些改进,但您也可以迁移到具有集成缓存系统的分布式系统(如任何其他多用户关系数据库),并让技术解决所有这些问题都为您解决。

使用网络共享访问 sqlite 确实是一种黑客行为,众所周知网络文件系统由于其对写入一致性的限制而导致数据丢失