【发布时间】:2012-12-13 04:24:27
【问题描述】:
我创建了一个 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# windows sqlite select system.data.sqlite