我正在使用sqlite来创建专有文件的索引,并且将使用多个线程(使用不同的sqlite句柄)来访问数据库以进行读写。
我知道sqlite会锁定文件以便为读者/编写者提供并发性,并依赖于OS文件api进行锁定。
这在windows和linux上都很好,但是对于solaris和hpux,我对咨询锁定的工作方式不太有信心。
有没有人知道sqlite在这些平台上的并发性能如何?
答案 0 :(得分:4)
根据我的经验(虽然基于有点过时的SQLite版本,即3.0.x - 3.2.x),你不希望在存在某种争用时依赖SQLite的默认锁定实现(即使它只是多个线程)在同一过程中。)
主要问题是SQLite只是暂停一段时间,然后再次尝试,如果文件已被锁定(直到忙等待超时到期) - 这可能会导致应用程序中出现“数据库锁定”错误。我实现的解决方法是使用我自己的锁(在多线程进程中使用互斥锁)以及SQLite自己的锁定。