以前做c/s程序,都是用adoconnection直接连上远端的sqlserver数据库,用数据感知组件来开发,后来发现有时候如果很多人同时在用的话,程序容易崩溃,我就想,是不是同时连接sqlserver的人太多了,sqlserver处理不过来呢?我又想如果在服务器端部署一个程序,客户端的程序都通过它来进出sqlserver,sqlserver只维持一个连接,那就不会崩溃了。(这个想法不知对错,请大家指正,不过我就着这个想法开始了下面的思考。)
    经过查找资料,发现“分布式多层数据库开发”的文章,形式上跟我的想法一样,具体是否真的一样,请大家指正,谢谢。打开我的delphi2010想照猫画虎,发现“新建”窗口里的Multitier组是灰色的,不可用,为什么?
    又找资料,又发现“使用DataSnap开发多层数据库系统”,看看我的delphi2010,还真有单独的“datasnap server”组的工程。这个跟Multitier又有何不同?
    找到的资料实在是凌乱,不好总体把握,请高手们简单介绍一下,好让我等菜鸟有个快速入门的机会,谢谢大家。

解决方案 »

  1.   

    虽然不喜欢c/s,c/s也的确是比较讨厌:需要客户端配置数据库的驱动、直接连接数据库
    但是,很多人同时在用 和 程序容易崩溃 应该没有直接的关系,只要数据库的许可数足够、服务器硬件足够,一般不会出现无法应付的连接太多,可以通过连接池、应用服务器(多层)来解决
      

  2.   

    如果是ADo远程连接数据库建议还是用分布式连接池
    如果是局域网本地数据库,你说的问题应该是设计上有问题。
      

  3.   

      客户端:
      SocketConnection + ClientDataSet
      服务器:
      adoconnection, adoquery
      中间层:servert.exe
      

  4.   

    Delphi socket三层技术比较成熟。服务器使用动态socket+ADO连接。每个用户动态生成一个,只要动态socket+ADO连接中的控件尽可能少,生成后占用内存小,一般不会有问题的。
      

  5.   

    可以使用IOCP的线程池来处理,对于满设备的操作(文件操作、数据库操作)都可以使用IOCP来提高效率。
    当用户量非常大的时候,最好自己手动编写一个负载平衡服务器来分配负载。这样就不会有什么问题了。
    关于IOCP线程池的东西,你可以参照这篇帖子:http://www.88dev.com/forum.php?mod=viewthread&tid=8&extra=page%3D1这篇帖子是讲述如何编写IOCP线程池的方法的。
      

  6.   

    服务器使用动态socket+ADO连接。采用多线程的方式为每个用户动态生成一个adoconnection,用完后释放,占资源很少。 我有成熟的产品在用的。