Python中的SQLite并发问题?
假设我有一个很大的SQLite文件(比如说500MB)。那么10个不同的python
实例可以同时访问这个文件,并且更新不同的记录吗?这里的重点是不同的记录。
举个例子,假设这个SQLite文件有大约1M
行:
实例1会处理(并更新)第0到100000行
实例2会处理(并更新)第100001到200000行
.........................
实例10会处理(并更新)第900001到1000000行
这意味着,每个python
实例只会更新文件中的一个独特部分。这样做可行吗,还是会出现严重的数据完整性问题?
2 个回答
4
有一点关系。一次只能有一个实例进行写操作,这意味着同时进行的写操作会被阻塞(可以参考SQLite常见问题)。你不会遇到数据完整性的问题,但我不确定你是否真的能从并发操作中获益,这还要看你写的次数和读的次数的比例。
4
更新,感谢André Caron的帮助。
你可以这样做,但在SQLite中,只有读取操作支持同时进行,因为一旦进行写入操作,整个数据库就会被锁住。在这种情况下,SQLite引擎会返回SQLITE_BUSY状态(如果超过了默认的访问超时时间)。另外,要注意这很大程度上取决于你所用的操作系统和文件系统的文件锁定实现情况。一般来说,我不太建议使用这个方案,特别是考虑到数据库文件可能很大,不过你可以试试看。
更好的办法是使用基于服务器的数据库(比如MySQL、PostgreSQL等)来实现你想要的应用行为。