【发布时间】:2016-05-19 12:57:42
【问题描述】:
我有一个 SQLite 数据库,其中包含存储为 blob 的小图像。我需要尽快读出几十张这样的图像,以便在用户界面中显示它们。
分析代码显示,绝大多数时间都花在了从数据库读取数据的 sqlite3_step 调用上。
如何提高这些读取的性能?
一个想法是让多个线程同时从数据库读取来提高性能,但是SQLite中的the threading documentation不是很清楚:是不是可以让多个线程同时从数据库读取,或者会读取总是被序列化,不管它们来自哪个线程?
还有其他方法可以提高从 SQLite 数据库读取 blob 的吞吐量吗?
【问题讨论】:
-
一个想法是首先不要将大 blob 放入数据库中,而是将它们保留在文件系统中,并在数据库中保留对它们的引用。这是什么原因?性能。
-
@trojanfoe 同意,但在这种特殊情况下,这不是一个选项。
-
那我想你得付出代价了。有一些技术可以提高插入性能,但我认为您对读取性能无能为力。
-
话虽如此,您真的遇到了性能问题吗?如果您将图像存储在文件系统中,那么您可能会发现大部分时间都花在
read()中,但这仅仅是因为它是最昂贵的系统调用。但是,这并不一定意味着您有问题。 -
为什么不使用文档目录来保存图像?您应该将图像放在文档目录中,并且应该将其名称(即路径)保存在 sqlite 数据库中。因此,您可以通过该名称快速使用它!
标签: ios database multithreading performance sqlite