我的SQLite的应用程序当前使用事务 - 都可以回滚和提高性能。我正在考虑用保存点替换所有交易。原因是应用程序是多线程的(是的,sqlite被配置为线程安全),在某些情况下,事务可能在同一时间(在同一数据库)上由两个线程开始(在相同的数据库)。

  1. 它有理由不这样做?
  2. 有没有任何陷阱,我需要知道?
  3. 我只替换生成的BEGINCOMMITROLLBACKSAVEPOINT xyzRELEASE SAVEPOINT xyz
有帮助吗?

解决方案

    It there a reason NOT to do it?
.

是。它不会解决您概述的任何问题。保存点主要用于能够进行部分回滚数据。外部交易或保存点是实际承诺的。直到最外面的保存点被释放,从而更新DB,无法完全保存任何内容。您回返与标准交易的同一问题。

    Are there any pitfalls I need to be aware of?
.

是。多线程应用程序中的事务或保存点可以相当轻松地死锁,如果您在两个不同的线程中更新相同的数据,我假设是此事的核心。这两方面没有区别。您应该了解您在每个线程中更新的内容并相应地同步。

简而言之,除非您有需要进行部分交易回滚,否则保存点真的不会给予你(除了它们被命名的事实。)

这里没有银耳子弹。它听起来您需要对应用程序的严重分析以及可能在多个线程中更新的数据,并在需要时添加一些同步。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top