加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite从事务转换到保存点

发布时间:2020-12-12 18:57:54 所属栏目:百科 来源:网络整理
导读:我的基于SQLite的应用程序当前使用事务 – 既可以回滚也可以提高性能.我正在考虑用保存点替换所有交易.原因是应用程序是多线程的(是的,sqlite配置为线程安全的),并且在某些情况下,事务可能由两个线程同时启动(在同一个db上). 有理由不这样做吗? 我需要注意
我的基于SQLite的应用程序当前使用事务 – 既可以回滚也可以提高性能.我正在考虑用保存点替换所有交易.原因是应用程序是多线程的(是的,sqlite配置为线程安全的),并且在某些情况下,事务可能由两个线程同时启动(在同一个db上).

>有理由不这样做吗?
>我需要注意哪些陷阱?
>我只用SAVEPOINT xyz,RELEASE SAVEPOINT xyz,ROLLBACK SAVEPOINT xyz替换BEGIN,COMMIT,ROLLBACK吗?

解决方法

It there a reason NOT to do it?

是.它不会解决您概述的任何问题.保存点主要用于能够进行部分数据回滚.外部事务或保存点是实际提交的内容.在释放最外面的保存点之前,没有任何东西真正完全保存,因此更新了DB.您回到了与标准交易相同的问题.

Are there any pitfalls I need to be aware of?

是.如果您在两个不同的线程中更新相同的数据,那么多线程应用程序中的事务或保存点可以相当容易地死锁,我认为这是问题的核心.在这方面,两者没有区别.您应该知道每个线程中要更新的内容并进行相应的同步.

简而言之,除非您需要进行部分事务回滚,否则保存点实际上不会给您太多(除了它们被命名的事实.)

这里没有银弹.听起来您需要对应用程序和可能在多个线程中更新的数据进行认真分析,并在需要时在您的应用程序中添加一些同步.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读