【问题标题】:sqlite database connection/locking questionsqlite数据库连接/锁定问题
【发布时间】:2010-07-09 19:19:22
【问题描述】:

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

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

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

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

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

谢谢!

【问题讨论】:

    标签: sqlite jdbc locking connection-pooling


    【解决方案1】:

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

    -唐

    【讨论】:

    • Thanx Don,这就是我最终可能会做的事情,尽管通过数据库池设置它会是更“标准”的方式(并且更少混淆,因为你像对待其他数据库一样对待 sqlite代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多