【问题标题】:SQLite not suitable for client server app?SQLite 不适合客户端服务器应用程序?
【发布时间】:2011-12-09 16:47:12
【问题描述】:

基于http://www.codeproject.com/KB/cs/SQLiteCSharp.aspx上的文章

与所有数据库一样,SQLite 也有一系列缺点。它不适合客户端服务器应用程序或网络数据库。它不太适合多用户场景,并且在通过网络同时访问时可能会出现严重的文件锁定问题。出于同样的原因,SQLite 不适合多线程或多进程的应用程序数据库访问场景。

SQLite 是否真的不适合客户端服务器应用程序?因为我想开发书店和卡拉OK应用程序? 如果 SQLite 不适合,哪些数据库适合哪些自包含、无服务器、零配置?

【问题讨论】:

  • 如果您只是在轻负载下运行,SQLite 在客户端-服务器设置中应该可以正常工作。 (假设“服务器”是您的应用程序后端,只打开一个到 SQLite 的连接,并正确同步对它的访问。)
  • SQLite for client-server的可能重复

标签: database sqlite client-server


【解决方案1】:

如果您只在单个线程下运行,并且您的应用程序速度足以满足所有请求,那么您就可以了。正如您所指出的,多线程或多个同时用户写入(通常通过多个线程)是您遇到问题的地方。

我对@9​​87654321@ 的回答更详细地概述了数据库锁等方面的一些问题,您已经用 SQLite 暗示过这些问题。

【讨论】:

  • SQLite 允许跨多个线程进行多次读取,但不允许多次写入。
  • 是的,感谢您的技术更正。我将它从 multiple simultaneous user access 更改为 multiple simultaneous user writes - 这是我最初的意图。
【解决方案2】:

SQLite FAQ 说:

(5) 多个应用程序或同一应用程序的多个实例可以同时访问一个数据库文件吗? 多个进程可以同时打开同一个数据库。多个进程可以同时执行 SELECT。但是,任何时候只有一个进程可以对数据库进行更改。

链接下方有更多信息。

所以您真正需要做的就是确保您使用某种锁定机制进行写入。

【讨论】:

  • 正确。 SQLite 有自己的锁定机制,并且会在 DB 锁定期间将 SQLite::Busy 错误传回给您,您可以使用它来做出适当的反应(例如稍后重试、取消写入等)
  • SQLite 包含它自己的锁定机制,它不允许同时写入。根据 SQLite 文档,问题在于各种网络文件系统在实现作为 SQLite 基础的文件锁定机制时并不可靠。
猜你喜欢
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多