2009-12-06 106 views
6

我写了一个Windows桌面应用程序,与Sqlite非常好地合作。这是一个单用户应用程序,数据库恰好位于应用程序运行的机器上。简单的多用户数据库解决方案

但是,应用程序已经增长,现在多个用户应该能够运行应用程序并连接到一个共享数据库。

我想只能分享网络驱动器上的sqlite文件,但这显然会导致数据损坏,除非有人有任何想法。

我想我可以要求安装数据库服务器,但商业MySQL许可证没有意义,PostgreSQL是不同的,我不得不重写我的许多应用程序。我还没有与Firebird合作过,所以我不确定这是否是一个好的解决方案。

是否有任何Sqlite数据库服务器可以安装处理Sqlite数据库文件上的传入事务?

如果我需要客户端自行下载和安装MySQL,是否必须要有商业许可证?

任何建议或方向将是伟大的,谢谢。

+0

为什么要搬到postgresql导致你重写了很多你的应用程序,但mysql不会? – warren 2009-12-06 20:25:21

+0

基于过去的Postgresql实验。但再看看可能不会有什么伤害,这已经过去了几年。 – 2009-12-07 08:08:21

+3

一个更新,我给了Postgresql另一个尝试,而且我实际上已经取得了很多成功。 – 2009-12-07 20:09:29

回答

5

什么SQL Server Express,它的自由,应该阻止你不必重写大部分代码,

+0

向下投票,请留下评论为什么这不是一个好的答案? – Rippo 2012-11-15 14:13:13

2

我不知道为什么你假设数据文件会被破坏,如果你把它放在一个网络驱动器上,让多个应用程序实例同时访问它。如果你主要阅读,你应该没问题。如果你做了很多写操作,你可能会遇到性能问题,因为只有一个实例可以同时写入。 (请参阅http://www.sqlite.org/faq.html

如果您执行了大量写入操作,您可能需要安装独立的服务器 - 是否考虑过MS SQL Server Express?应该是容易和简单起床和运行。

+0

Sqlite论坛表示,如果它在FNS文件系统上,它将无法锁定。 Windows共享我们的SMB而不是NFS是真的,因此不会有问题?如果文件被锁定,我担心必须围绕每个搜索编写代码来循环。 – 2009-12-07 17:45:00

8

像你描述的,这取决于底层文件系统您可以使用共享网络驱动器上SQLite的文件:

http://www.sqlite.org/faq.html#q5

多个进程可以有相同的 数据库在开放同时。 多个进程可以同时做一个 SELECT。但是,只有一个 进程可以在任何时间对 数据库进行更改,然而, 。

SQLite使用读写器锁来控制对数据库的访问。 (在 WIN95/98/ME不缺乏 读/写锁的支持,概率 模拟代替。)但是,使用 注意:此锁定机制可能 无法正常工作,如果数据库 文件保存在NFS文件系统。 这是因为fcntl()文件锁定 在很多NFS实现中被破坏。 如果多个 进程可能尝试同时访问文件 ,则应避免将SQLite 数据库文件放在NFS上。在Windows上, 如果您没有运行 Share.exe守护进程,Microsoft的文档说明 锁定可能无法在FAT 文件系统下工作。对Windows有很大的经验的人们告诉我 网络文件的文件锁定是 非常麻烦并且不可靠。如果 他们说的是真的,在两台或多台Windows机器之间共享一个 SQLite数据库可能会导致 意外问题。

+1

[何时使用](http://www.sqlite.org/whentouse.html)页面建议不要在有多个用户/客户端时直接通过网络使用SQLite。它指出:“一个很好的经验法则是,你应该避免在通过网络文件系统从多台计算机同时访问同一数据库的情况下使用SQLite。” – 2013-07-18 16:15:10

4

我认为Firebird可以是一个非常不错的选择

  • 它是免费的
  • 嵌入式版本存在
+0

我花了很多时间试图让Firebird与我的应用程序一起工作,但最终每一步都遇到了错误。为了了解为什么我无法创建表格,因为每次我从常见问题解答中更改某些内容时,我都会遇到新错误,必须返回,更改内容,然后再出现其他错误。主要基于权限。我不认为我想与每一位试图安装它的客户都经历这些挫折。 – 2009-12-07 17:43:24

+0

我不知道你的权限问题,但如果你需要一些好的GUI工具,你可以使用www.upscene.com或www.ibexpert.com(都有免费版本) – 2009-12-07 19:50:28

0

我知道的太晚了,但现在没有人需要编写一个没有提供数据库抽象框架的应用程序。

我个人使用的Web2py是一个基于python的Web框架。默认情况下,它使用SQLite,它适用于本地桌面上的单用户应用程序或本地网络上主要是读取操作的中小型应用程序。但是,如果我决定增加应用程序使用的范围,我只需将数据库模式中的连接字符串更改为使用其他数据库。 Web2py或任何其他值得使用的框架只会重写SQL语句以满足新的要求。

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”) ;

0

如果我要求客户端自行下载和安装MySQL,是否必须有商业许可证?

一个MySQL商业许可的价值在于,它允许在二进制形式分发标准的MySQL或改性的MySQL而不的oblihation也分发源代码。它也让你获得支持。

但是,如果用户从Oracle获得MySQL本身,则GPL没有义务向您提供MySQL源代码。他们可以从Oracle获得。事实上,只要Oracle根据GPL进行分发,Oracle有义务提供。