我制作了一个 SQLite 数据库(约 700MB,3 个表,3 个索引 - 1 个 rtree 索引和 2 个主键)。我已将其标记为只读文件(在 Windows 上)。
从多个线程在此数据库上仅执行 SELECT 命令是否安全且高效?
如果是这样,如何提高性能(启用任何选项或标志,任何微小的调整)?
此应用程序是在 C# 中使用 System.Data.SQLite (1.0.82.0),在 x64 机器上为 .NET 4.0 编译。而且它工作正常(不一定是高性能或正确并行,因为我不能/不知道(如何)证明它们)。目前我没有真正的瓶颈,但很快我就会!我需要尽快搜索 rtree。 (在我的机器上 4GB,2 核)搜索 rtree 有时需要超过 5 毫秒。我已经使该部分成为多线程以并行处理我的数据。并根据R-Tree的结构(或者我认为 SQLite 中的 R*-Tree)如果我的数据库增长到一些 GB,那应该没问题,因为这些树深度低并且在大型数据集上速度很快。但如果有任何改进是可能的,那么应该在此应用中考虑。
我不能确定并行的部分是否真的并行运行,例如 SQLite(或 System.Data.SQLite)没有内部锁。事实上,在某些测试中,并行版本运行得更慢!
最佳答案
这应该是安全的,前提是每个线程都有自己的连接,或者您使用锁来防止多个线程同时使用同一个连接。
关于c# - 在 SQLite 上只执行 SELECT 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14060443/