从技术上讲,这不是我需要解决的问题。我正在开发一个项目,其中应用程序直接连接到 MS Access 数据库。客户建议将数据库迁移到他们的 SQL Server 实例。然后,应用程序将使用不同的连接字符串直接连接到 SQL Server 数据库而不是 MS-Access。简单的测试运行证明这是可行的,两个用户连接到同一个数据库。
我不知道客户实际使用的是哪个版本的 SQL Server,但我认为他们知道自己在做什么。现在,我正在添加一些额外的代码更改,我可以在最多 5 个用户的情况下在 SQL Server Express 2005 上测试该应用程序。但客户将有超过 500 个用户,他们都将同时使用同一个应用程序,因此将有 500 个直接连接到数据库。
我无法说服客户为该项目更好的客户端/服务器模型支付额外费用。这也需要一些额外的开发时间。而且我不知道在单个 SQL Server 数据库上有这么多用户时可能出现的问题。所以我觉得我就像泰坦尼克号的船长,刚刚发现了一座冰山……
那么,它会沉没吗?这个设置有哪些风险是客户忽略的?或者说,根本没有什么值得一提的风险?(客户对 SQL Server 很有经验,所以主要是我对此有疑虑。)
答案1
只要用户使用的版本至少有 500 个用户许可,SQL Server 2005 就可以正常工作。由于连接中断等问题,您可能希望支持超过 500 个用户,但我始终建议使用 SQL Server,而不是 MS Access。
我只是想补充一点,SQL 服务器可以拥有数千个并发连接,所以如果我是你的话,我不会担心。
答案2
Joshua 的说法是正确的,SQL Server 可以毫无问题地处理大量连接。更重要的问题是您的数据库架构和应用程序代码是否能够处理它。
更多用户同时尝试访问和修改相同的数据可能会导致数据库中所有表/行锁定导致更多请求被阻止。在这种使用情况下,应用程序的性能可能会变得非常缓慢。如果不查看数据库架构,很难判断。尽管假设您只是从 Access 进行了简单的 MS-SQL 转换,但您可能没有利用真正的 RDBMS 擅长的功能,例如约束、外键和索引。
您应该注意的另一件事是由于多个并发用户而出现的问题。为单个用户设计应用程序可以让您在需要原子性的数据库事务等事情上走捷径。在多线程编程中,您会遇到同样的问题。如果您有一系列需要同时进行的数据库操作,那么当另一个用户在第一个用户尚未完成时启动相同的进程时会发生什么?第二个用户的处理会影响第一个用户吗?如果是这样,您需要考虑到这一点。
最终,时间会告诉我们答案。但你可能要面对比预期更多的工作。
答案3
作为一名经验丰富的 SQL(和 Access)用户,我同意这一点。我认为旧的 MSDE2000 有连接限制,但较新的 SQL Express 则完全不受限制。Express 版本将能够处理连接数,但 Express 版本仅限于一个 CPU,这有点限制。
如果您最终需要更多功能,则必须获得多 CPU 版本的 SQL,并且需要为此付费。