【问题标题】:SQLite: Archiving records in different database or tableSQLite:归档不同数据库或表中的记录
【发布时间】:2020-07-21 16:05:45
【问题描述】:

我的架构性能问题是一个遗留问题:共享网络文件夹中 SQLite 数据库的多用户访问。 (是的,我知道,但我无法改变这一点!)

我想归档一些(不是全部)早于指定日期的表的记录。这是为了提高性能,因为我意识到该程序的速度要快得多,有 200 条记录,而不是 20.000 条(过去 10 年)。

有两种方法:

  1. 复制数据库(结构)并将记录从一个数据库移动到另一个数据库,然后使用 VACUUM 缩小工作数据库。 (一个特殊数据库的当前值:111 K 生产力 + 7.330 K 存档)
  2. 在生产数据库中创建存档表并将记录从一个表移动到另一个表,然后使用 VACUUM 缩小工作数据库。

方法 2 更容易控制(例如,一个事务可用于传输/存档数据),但它将所有内容都保存在一个数据库中。大多数时候,我只会访问小工作台。只有在极少数情况下,才会在大存档表中搜索旧记录。

我必须期待什么样的性能行为?什么会更快/更好?

亲切的问候, 伴侣

【问题讨论】:

    标签: performance archive


    【解决方案1】:

    我注意到以下行为,有 250 条记录的相关表:

    1. 两个数据库,生产数据库150 K
    2. 一个数据库,包括。存档表,缩小 4700 K

    我在本地驱动器和网络共享驱动器上测试数据库,在网络共享上运行三个并发进程在我的 PC 上,每个进程有 100 次读取操作,访问之间的随机睡眠时间为 50 到 150 毫秒,以避免大规模并行操作。

    结果:

    1. 两个数据库:1128 毫秒
    2. 一个数据库:1186 毫秒 (+5 %)

    我得出的结论是,在这种情况下性能提升几乎无法衡量,因此我将归档到同一数据库的不同表。这个解决方案的最大优势是我可以完全控制归档过程因为我可以使用事务。在两个数据库上,我不能有一个事务,因此我需要手动备份和恢复数据库文件,这也可能由于一些奇怪的原因而出错。在这种情况下,很难产生一致的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多