【问题标题】:Does it make sense to make multiple SQLite databases to improve performance?制作多个 SQLite 数据库以提高性能是否有意义?
【发布时间】:2013-10-17 00:46:25
【问题描述】:

我刚刚学习 SQL/SQLite,并计划将 SQLite 3 用于我正在构建的新网站。它正在取代 XML,因此并发性不是一个大问题。但我想用我正在使用的技术使其尽可能高性能。使用多个数据库来提高性能是否有任何好处,或者将站点的所有数据保存在一个文件中是最佳性能?我问是因为 99% 的数据在 99% 的时间里都是只读的,但最后 1% 的数据将在 99% 的时间里被写入。我知道数据库不会为每一个微小的变化读入并重新写入整个文件,但我想我想知道如果数据进入一个单独的 5KB 数据库,而不是数据的一部分,写入是否会快得多~ 250MB 主数据库。

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    通过适当的性能调优,sqlite 可以在63 300 inserts-per-second 左右运行。除非您计划进行一些非常大的容量,否则我会避免预先优化。拆分成两个数据库对我来说感觉不对,如果你打算在未来进行连接,你会被淹没。尤其是你说并发不是什么大问题,我会避免使数据库设计复杂化。

    【讨论】:

    • 我认为我不会为任何连接而烦恼。小型数据库仅用于存储各种页面的视图计数器。由于每个视图都会检索和增加数据,因此我认为将数据读取和写入到小型数据库会更快,然后再从包含大量其他数据的巨型数据库中读取数据。至少我是这么想的。
    • 另外,我对大型数据库的很多查询可能需要一段时间......每个都需要几秒钟。如果它偶尔尝试同时执行多个大 SELECT 并将增量计数器也写入同一个数据库,这有关系吗?我想这是我更大的问题......它有点并发相关,但该网站真的不会得到那么多点击。
    • 这是一个好点。值得研究一下 sqlite 的写锁是如何工作的。老实说,如果它们不共享任何需要一起查询的公共数据,我认为您使用两个数据库的方法没有任何问题。如果写作最终会频繁锁定数据库,那么将它们分开似乎是个好主意。
    【解决方案2】:

    实际上,如果有 50 000 个数据库,性能会很差

    你应该在单个数据库中尝试多个表,有时它确实可以加快速度,但是由于初始任务的描述非常笼统 - 很难准确地说出你需要什么,尝试单个表和多个表 - 测量速度

    【讨论】:

    • 嗯,我想我会使用两个数据库。一个大的大部分是只读的,一个小的写入很多(“很多”可能是每分钟十几次左右)。
    • 对于这种情况 - 这是一个好方法,但为什么你需要数据库呢?也许简单的文件也可以使用?
    • 嗯...因为 Stackoverflow 和 Reddit 上的人们说如果我不使用数据库来建立一个具有大量数据吞吐量和数千次点击的网站,我会很疯狂? :-p 老实说...我使用 XML 替换的系统偶尔会出现并发问题,这可能会在重新设计的 XML 模式的重新设计中得到解决,而不是大量读取和写入巨大的文件,但是人们说服我使用数据库,SQLite 似乎是一个不错的折衷方案。
    • 如果你的系统功能是关于多个xml文件——那么我真的建议你使用xml文件,而不是数据库,当然你需要考虑备份然后
    • 好吧,我想我被数据库模型的关系部分所吸引。这是我正在开发的一个音乐网站,使用 XML 系统,我有很多重复的数据。在用户配置文件 XML 文件中,有他们喜欢的乐队列表。在乐队配置文件 XML 文件中,有一个喜欢他们的用户列表。如果用户改变了他们的偏好,我会在两个位置都改变它。与将数据保存在一个位置的 XML 解决方案相比,无论哪种情况,写入速度较慢,但​​读取速度较快。
    【解决方案3】:

    不要创建新数据库

    对于来自其他 RDBMS 的人来说,这是一个巨大的思维变化 系统。

    考虑使用 SQLite 作为应用程序文件格式的情况。每一个 当您第一次在应用程序中保存新项目(文件)时, 需要新的数据库实例。

    您可以创建一个新数据库,并执行一系列 SQL 添加适当的表和索引的语句。

    如果您正在构建一个可部署的,这就是您想要做的 使用(例如)PostgreSQL 的应用程序——你可以将代码写到 设置数据库并在安装时运行它。

    但是有一个更快的方法。

    由于 SQLite 数据库是一个离散的文件,它相对来说是微不足道的 克隆数据库——它只是复制一个文件。这意味着 通常不需要创建一个新的数据库然后执行 所需的所有 SQL 语句。通常,您只需复制一份即可。

    来源:https://www.whoishostingthis.com/compare/sqlite/optimize/

    【讨论】:

      猜你喜欢
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      相关资源
      最近更新 更多