【问题标题】:SQLite: Using One File vs. Many FilesSQLite:使用一个文件与多个文件
【发布时间】:2015-01-29 04:55:38
【问题描述】:

我正在使用 Python 开发一个项目并使用 SQLite3。我不希望使用任何大量记录(少于我做过的其他一些没有显示任何显着性能损失的项目),我正在尝试决定是否应该将整个数据库放在一个文件中或多个文件。这是一个分类帐程序,它将所有供应商的名称、配置信息和用户的所有数据保存在一个数据库文件中,但我正在考虑为每个分类帐使用不同的数据库文件(在为不同目的使用不同分类帐的情况下)或投资活动)。

我从here 知道,我可以在需要时跨不同文件中的数据库进行联接,所以我看不出有任何理由必须将所有表保存在一个数据库中,但我也没有看不出我需要将它们分成不同文件的原因。

在 SQLite 中使用一个 DB 与使用多个 DB 相比如何?使用一个文件或使用多个文件的优缺点是什么?使用一种格式而不是另一种格式是否有令人信服的理由?

【问题讨论】:

    标签: python sqlite


    【解决方案1】:

    这里有几点需要考虑。随意在 cmets 中添加更多内容。

    优点:

    1. 您可以将每个数据库文件放在不同的物理驱动器上,并受益于并行读/写操作,从而使这些操作稍微快一些。

    缺点:

    1. 您将无法跨数据库创建外键。
    2. 依赖于来自多个数据库的表的视图将要求您始终附加所有数据库,对附加的数据库使用完全相同的名称(如果内部定义的SELECT 语句不正确,则查询视图将报告错误,但它是仅在查询时编译和验证)。
    3. 触发器不能跨数据库操作,所以在某些表上的触发器只能查询同一个数据库中的表。
    4. 事务将是跨数据库的原子事务,但前提是主数据库既不是 WAL 模式,也不是 :memory: 数据库。

    换句话说,您可以实现一些速度提升(假设您有文件驱动器可以使用),但您在数据库设计中失去了一些灵活性,并且更难保持一致性。

    【讨论】:

    • 我原以为使用大文件的一个缺点是,如果出现问题,我会丢失整个数据集。这不太可能发生吗?
    • “出了点问题”,比如你的驱动器坏了?好吧,你是对的,但为了这个目的,你应该周期性地进行备份。您不想因为开车休息而失去一张桌​​子。这就是为什么你会做备份。由于您会进行备份,因此无论您是备份单个文件还是多个文件都没有关系。
    • 或文件损坏。我曾一度遇到数据库文件锁定的问题。 (事实证明,SQLite 浏览器并不总是表现良好。)
    • 好吧,无论如何你都应该有一个备份。即使你只松了一张桌子,它仍然是有害的。
    • 总是三个备份。两个在现场,一个在亚马逊上加密。
    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2019-09-19
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多