【问题标题】:Will SQLite performance degrade if the database size is greater than 2 gigabytes?如果数据库大小大于 2 GB,SQLite 性能会下降吗?
【发布时间】:2013-01-05 06:34:50
【问题描述】:

去年我在他们的网站上查看 SQLite 时,推荐的 SQLite 数据库大小为 2 GB。但是现在,我再也找不到那个建议了。

那么有没有人尝试过使用最新版本的大于 2 GB 的 SQLite 数据库? SQLite 的表现如何?

P.S:我想制作一个需要在本地运行的大型数据库(例如存储 Wikipedia 文章)的移动应用程序。

【问题讨论】:

    标签: sqlite android-sqlite


    【解决方案1】:

    没有 2 GB 的限制。

    SQLite 数据库文件的最大大小约为 140 TB。

    在手机上,存储空间的大小(几 GB)会限制您的数据库文件大小, 而内存大小将限制您可以从查询中检索多少数据。 此外,Android 游标的结果限制为 1 MB。


    数据库大小本身不会影响您的性能。 只要您的查询不访问超过数据库page cache(默认为 2 MB)的数据,您的查询就会很快。

    【讨论】:

    • 感谢您的有用回答。但我想知道的是,sqlite 的性能取决于它的数据库大小。
    • 我在 StackOverflow 上阅读了其他答案,人们成功地使用了更大的数据库(甚至高达 100GB),所以我很确定 SQLite 可以很好地处理 2GB。
    • 我假设此限制不适用于 python sqlite 模块,只要您可以使用光标一次迭代一行
    • @PirateApp 是的,我不清楚“Android 游标的结果限制为 1 MB”是什么意思......这是否意味着每行的大小可以达到 1MB,因为您可以迭代一次光标一行?如果没有,你如何处理更大的数据集?
    • 从 3.33.0 (2020-08-14) 版开始,最大大小为 281 TB。 sqlite.org/changes.html
    【解决方案2】:

    通常,数据库越大,您拥有的数据就越多。您拥有的数据越多,搜索所需的时间就越长。他们不必这样做,这取决于搜索。

    对于插入,如果表上有很多索引,它们可能需要更长的时间。重建索引可能需要一些时间,因此插入速度会随着数据量的增加而下降。

    更新也可能更慢 - 必须首先找到合适的行(搜索),然后必须更改值(可能会触发索引重建)。

    我是根据经验告诉您的:如果您希望数据库中有大量数据,请考虑将其拆分为多个数据库。如果您每天收集数据并且您可以为每天创建一个数据库,则此方法有效。可能会使您的搜索代码更复杂,但会加快有限搜索的速度/

    【讨论】:

    • 虽然我同意你的说法,但我认为如果你在手机上创建一个应用程序,创建很多文件可能不是最好的主意......它使用更多的磁盘空间来拥有很多单独的文件。
    • @AlexisWilke 对于大小合理的文件(例如 1mb+),在大多数文件系统上,每个文件丢失的空间量可以忽略不计
    • @Dariusz 嗨,如果我想保存每个图块大约 20kb 的图像图块,并且总大小约为 40TB,我该如何处理将数据添加到 sqlite 数据库中?你有什么增加的想法吗?插入性能?图块总数约为1831292252
    • @MajidHojati 如果您没有索引、FK 等,那么在这种情况下,插入性能应该完全受磁盘性能的限制
    • @Dariusz 所以我必须先插入数据,然后才能在表上启用索引。对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    相关资源
    最近更新 更多