【问题标题】:sqlite, c++, disconnect after task?sqlite,c ++,任务后断开连接?
【发布时间】:2021-10-13 14:58:32
【问题描述】:

sqlite 新手,我来自网络开发,其中连接执行任务,断开连接是使用数据库的正确方法。现在我在本地将 sqlite 用于 c++ 软件。没有互联网,也没有服务器。

我可以/应该保持连接打开直到我关闭程序以加快应用程序的速度吗? (我使用的是加密数据库,sqlcipher)

编辑:

为了保持打开状态,我有 2 个可能的问题:

1 证券。但在这种情况下,安全性甚至可以提高对文件的锁定(?)。或者在某处可能存在文件(临时文件)的未加密副本?

2 效率:如果文件打开,我不进行连接/断开连接,但可以让进程打开,当然这个过程不是密集的,但是......我必须看看......

【问题讨论】:

  • 您是经常使用数据库,还是很少使用?
  • sqlite 是一个本地数据库。您不会与其他应用程序共享它,是吗?或者您的相同应用程序的其他实例?如果这两个问题的答案都是“否”,那么只要你愿意,就让它保持打开状态
  • @tas 非常多变,但我会谨慎地说。 @joe 不,我不分享它。
  • @Joe ..........
  • @Tas ..........

标签: c++ sqlite sqlcipher


【解决方案1】:

连接到数据库是一项昂贵的操作。出于这个原因,即使在 Web 开发中,也经常使用连接池:您有许多可用连接,每个事务从池中获取一个连接,完成其工作并将连接返回到池中。

但是通过这种设计,通过关闭和重新打开连接来定期回收连接也很常见。基本原理是,如果部分代码行为不正确,例如忘记释放资源,关闭连接将确保正确清理。

在您的本地系统中并没有什么不同:为每个任务使用新连接肯定会浪费资源,但是如果程序可以运行很长时间,则永远不要回收连接假定所有数据库访问都是完全正确的,这可以是勇敢的......

毫无疑问,对此非常谨慎,但如果其他人必须稍后维护该代码怎么办... ;-)

长话短说,连接的生命周期是性能(越长越好)和稳健性(越短越好)之间的平衡

【讨论】:

    猜你喜欢
    • 2016-11-13
    • 2016-04-03
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多