【问题标题】:Can SQLite support multiple users?SQLite 可以支持多用户吗?
【发布时间】:2011-02-24 08:19:20
【问题描述】:

我正在尝试开发一个基于 Windows 的应用程序,让多个用户同时访问同一个数据库。 SQLite 可以同时支持多个访问吗? SQLite 在这方面稳定吗?是什么让 SQLite 比 MS SQL CE 更好或更差?

谢谢。

【问题讨论】:

标签: sqlite


【解决方案1】:

是的,SQLite 可以同时支持多个用户。然而,它在写入时会锁定整个数据库,所以如果你有很多并发写入,它不是你想要的数据库(通常数据库被锁定的时间是几毫秒 - 所以对于大多数用途来说这并不重要)。但它经过了很好的测试并且非常稳定(并且被广泛使用),因此您可以信任它。

您可以阅读此简短文档以了解何时使用 SQLite 和不使用 SQLite:http://www.sqlite.org/whentouse.html

【讨论】:

  • 我发现它比 MSSQL CE 快得多。
  • 只是一个颠簸。因此,如果我们每 100 毫秒执行 10 个插入命令,并且每个命令的写入时间少于 10 毫秒,我们应该没有问题吗?所以我猜服务器(apache)会以某种方式处理写入队列。
  • 还有WAL mode 用于增加并发性,允许在写入期间仍然发生读取。 (但不允许并发写入,尽管起初对此模棱两可:Concurrency § 中有一句话说明了这一点。)
  • 多个用户可能存在问题(如在 linux 用户帐户中)。它可能无法在 WAL 模式下或使用共享内存时工作。我观察到 .db-shm 和 .db-wal 文件是使用其他用户作为所有者和组创建的。这阻止了应用程序(以拥有 .db 文件的用户身份运行)进行事务。
【解决方案2】:

如果并发写入是个问题,您可能需要查看Berkeley DB。 SQL API 完全兼容 SQLite。事实上,它结合了 Berkeley DB 存储引擎的 SQLite 执行器顶部,确实支持多个并发写入操作。

【讨论】:

    【解决方案3】:

    是的。
    来自paragraph #5 中的SQLite FAQ:

    多个进程可以同时打开同一个数据库。多个进程可以同时执行 SELECT。但是只有一个进程可以随时更改数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 2017-12-14
      • 2018-11-09
      • 1970-01-01
      • 2011-05-22
      相关资源
      最近更新 更多