我们有一个Java桌面应用程序,可以访问位于网络共享驱动器上而不是本地的Derby数据库。
当应用程序的多个实例共享数据库时,只有一个实例具有实时连接。
这已经运行了两年多,但有时我们遇到数据库损坏,我们无法确定是由软件错误还是由于应用程序和远程数据库之间的网络造成的。
我们意识到Derby文档声明嵌入式数据库应仅用于本地持久性,但是有人可以提出一些我们可能期望通过此配置遇到的特定陷阱吗?
提前致谢!
吉姆
答案 0 :(得分:2)
特别是关于数据库损坏,我认为在网络共享存储上拥有数据库存在(至少)两个基本问题:(1)当Derby尝试通过增长文件来分配空间时,文件系统可能会报告虽然实际上磁盘已满,但分配成功; (2)当Derby试图确保磁盘写入实际上完全写入磁盘时,文件系统可能会将数据报告为写入磁盘,即使实际上它仍然只写入内存。
上述任何一个问题,如果它们恰好在恰当的时间发生,都会导致数据库损坏。
答案 1 :(得分:1)
我们意识到Derby文档声明嵌入式数据库应仅用于本地持久性,但是有人可以提出一些我们可能期望通过此配置遇到的特定陷阱吗?
我会说你应该注意文档说的内容。开发德比的人不可能在没有正当理由的情况下提供限制德比适用性的建议。
(我可以理解为什么共享嵌入式Derby数据库的多个应用程序实例会出现问题.Derby会认为它不需要担心多个实例的读取和更新,并且可能无法按照允许的顺序刷新数据安全地工作。这种冲洗不应该是必要的......除非你以一种你不应该使用的方式使用德比。)
此外,为什么你不采用使用Network Server版Derby的方式?