我制作了一个 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)没有内部锁。事实上,在某些测试中,并行版本运行速度较慢!