我编写了一个非常适合Sqlite的Windows桌面应用程序。它是一个单用户应用程序,数据库就位于运行应用程序的计算机上。
但是,应用程序已经增长,现在多个用户应该能够运行应用程序并连接到一个共享数据库。
我希望能够在网络驱动器上共享sqlite文件,但这显然会导致数据损坏,除非有人有任何想法。
我想我可能需要安装数据库服务器,但商业MySQL许可证没有意义,PostgreSQL与我不得不重写我的应用程序。我根本没有和Firebird合作过,所以我不确定这是不是一个好的解决方案。
是否有可以安装的Sqlite数据库服务器来处理Sqlite数据库文件上的传入事务?
如果我要求客户自行下载和安装MySQL,我是否必须拥有商业许可证?
任何建议或方向都会很棒,谢谢。
答案 0 :(得分:8)
您可以在共享网络驱动器上使用Sqlite文件,具体取决于底层文件系统:
http://www.sqlite.org/faq.html#q5
多个进程可以具有相同的功能 数据库同时打开。 多个进程可以做一个 同时选择。但只有一个 过程可以改变 数据库随时都有, 但是。
SQLite使用读取器/写入器锁 控制对数据库的访问。 (下 Win95 / 98 / ME缺乏支持 读/写锁,概率 而是使用模拟。)但是使用 警告:这种锁定机制可能 如果数据库无法正常工作 文件保存在NFS文件系统上。 这是因为fcntl()文件锁定 在很多NFS实现上被打破了。 你应该避免使用SQLite NFS上的数据库文件,如果是多个 进程可能会尝试访问该文件 同时。在Windows上, 微软的文档说明了这一点 锁定可能无法在FAT下工作 文件系统,如果你没有运行 Share.exe守护程序。拥有的人 很多Windows经验告诉我 文件锁定网络文件是 非常马车,不可靠。如果 他们说的是真的,分享一个 SQLite数据库之间有两个或更多 Windows机器可能会导致 意想不到的问题。
答案 1 :(得分:5)
SQL Server Express怎么样,它是免费的,应该阻止你重写大部分代码,
答案 2 :(得分:5)
我认为Firebird可以是一个非常好的选择
答案 3 :(得分:3)
有一些sqlite服务器可以在多用户环境中使用sqlite。请在此处阅读:http://www.sqlite.org/cvstrac/wiki?p=SqliteNetwork。我不知道这些解决方案的表现和规模。
答案 4 :(得分:2)
如果您将数据文件放在网络驱动器上并让多个应用实例同时访问它,我不知道为什么您认为数据文件已损坏。如果你主要阅读,你应该没事。如果您执行大量写操作,则可能会遇到性能损失,因为只有一个实例可以同时写入。 (见http://www.sqlite.org/faq.html)
如果你做了很多写,你可能需要一个独立的服务器安装 - 你考虑过MS SQL Server Express吗?启动和运行应该简单易行。
答案 5 :(得分:0)
我知道太晚了,但是现在没有人应该在没有提供数据库抽象的框架的情况下编写应用程序。
我个人使用Web2py,这是一个基于python的Web框架。默认情况下,它使用SQLite,非常适合本地桌面上的单用户应用程序或本地网络上主要是读取操作的中小型应用程序。但是,如果我决定增加应用程序使用范围,我只需更改数据库模式中的连接字符串即可使用其他数据库。 Web2py或任何其他值得使用的框架只需重写SQL语句即可满足新的要求。
答案 6 :(得分:0)
在多个用户可以插入,删除,选择e.t.c之后,在连接字符串上使用此代码。在您的数据库中没有问题。
SQLiteConnection con = new SQLiteConnection(" Data Source = D:\ yourdatabase.db; Count Changes = off; Journal Mode = off; Pooling = true; Cache Size = 10000; Page Size = 4096; Synchronous = off& #34);
答案 7 :(得分:0)
如果我要求客户自行下载和安装MySQL,我是否必须拥有商业许可证?
没有
MySQL商业许可证的价值在于它允许您以二进制形式分发标准MySQL或修改后的MySQL,而无需强制分发源代码。它还为您提供支持。
但是,如果用户自己从Oracle获得MySQL,那么GPL没有义务为您提供MySQL源代码。他们可以从Oracle获得它。实际上,只要它们按照GPL分发,甲骨文就有义务提供它。