首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sqlite在网络共享中的应用

sqlite在网络共享中的应用
EN

Stack Overflow用户
提问于 2011-08-21 11:31:26
回答 2查看 4.1K关注 0票数 2

我们在基于windows桌面的Java应用程序上使用SQLite (Xerial驱动程序)。现在,我们将转移到同一个应用程序的客户机-服务器版本,其中多个基于Java的Swing客户端将连接到指定服务器Windows上的同一个SQLite db文件。如果我错了,请纠正我:

  1. 通过网络保存SQLite数据库文件是在这种模式下使用SQLite的唯一选项吗?还是我错过了其他的解决方案?
  2. 使用SQLite会增加DB损坏的几率吗?

我没有看到很多并发的更新操作。将有5-10个客户端试图读取和更新相同的DB。在这种情况下,使用entperise等级DB (MySQL,Postgres)更好吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-21 11:58:03

来自于一位被引用前的FAQ段落

SQLite使用读取器/写入器锁来控制对数据库的访问。(在缺乏对读取器/写入器锁的支持的Win95 95/98/ME下,使用的是概率模拟。)但请注意:如果数据库文件保存在NFS文件系统上,则此锁定机制可能无法正常工作。这是因为fcntl()文件锁定在许多NFS实现上中断。如果多个进程可能试图同时访问该文件,则应避免将SQLite数据库文件放在NFS上。在Windows上,微软的文档说,如果您没有运行Share.exe守护进程,那么锁在胖文件系统下可能无法工作。对Windows有丰富经验的人告诉我,网络文件的文件锁定是非常错误的,而且不可靠。如果他们说的是真的,那么在两台或多台Windows计算机之间共享一个SQLite数据库可能会导致意想不到的问题。

我不会在网络上共享一个SQLite数据库文件,因为看起来您将为自己购买严重的同步问题,从而很难再现数据损坏。

换句话说,您正在使用通用文件共享机制来替代另一个DBMS的服务器功能。对于多个客户端访问,这些数据库管理系统都经过了专门的测试和现场强化,尽管SQLite有很大的优点,但这并不是其中之一。

票数 3
EN

Stack Overflow用户

发布于 2011-08-21 11:45:22

这是一个常见问题

..。我们知道没有其他嵌入式SQL数据库引擎像SQLite那样支持并发性。SQLite允许多个进程同时打开数据库文件,并允许多个进程同时读取数据库。当任何进程想要写入时,它必须在更新期间锁定整个数据库文件。但这通常只需要几毫秒。其他流程只需等待作者完成,然后继续他们的业务。其他嵌入式SQL数据库引擎通常只允许一个进程同时连接到数据库。..。

也可以阅读SQLite是无服务器的

SQLite是否满足您的需求是不可能的。如果您有长期运行的update事务,锁定整个数据库可能是一个严重的问题。由于您正在使用JDBC来访问它,如果有必要的话,切换到另一个数据库引擎应该不会有太多问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7137994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档