gpt4 book ai didi

sqlite数据库连接/锁定问题

转载 作者:IT王子 更新时间:2023-10-29 06:29:37 24 4
gpt4 key购买 nike

伙计们我正在使用 sqlite 实现一个基于文件的队列( see my earlier question )。我有以下线程在后台运行:

  1. thread-1 将内存结构清空到“队列”表中(插入到“队列”表中)。
  2. 读取和“处理”“队列”表的线程 1 每 5 到 10 秒运行一次
  3. thread-3 - 很少运行并从“队列”表中清除不再需要的旧数据,并且还运行 vacuum,因此数据库文件的大小保持较小。

现在我想要的行为是让每个线程获得它需要的任何锁(如果可能,等待超时)然后完成事务。如果线程不并发运行也没关系 - 重要的是事务一旦开始就不会因为“数据库被锁定”等“锁定”错误而失败。

我查看了 transaction documentation但似乎没有“超时”功能(我正在使用 JDBC)。连接中的超时时间可以设置的大吗?

我能想到的一个解决方案(未尝试)是有一个最多 1 个连接的连接池。因此一次只能连接一个线程,因此我们不应该看到任何锁定错误。有没有更好的方法?

谢谢!

最佳答案

如果是我,我会使用单个数据库连接句柄。如果一个线程需要它,它可以在一个关键部分(或互斥量,或类似的)内分配它——这基本上是一个穷人的连接池,池中只有一个连接:)它可以与数据库一起工作。完成后,它退出临界区(或释放互斥量或?)。如果您小心使用单个数据库连接,您将不会遇到锁定错误。

-唐

关于sqlite数据库连接/锁定问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3215848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com