我现在要写的程序是这样的
数据库使用的是Sql server2000,在租用的一台VPS方式的服务器上,有固定IP,客户端需要把数据写入数据库或获取相关数据显示在客户端等
我现在不知道哪个方案好
1.让客户端直接连接数据库
2.另写一个服务器端程序,让客户端通过socket连接服务器端程序,读写数据库由服务端实现注:客户端需要传递的数据量比较大,多的情况下每次可能需要传递500万-1000万字节,大概会有2000左右个客户端,每个客户端使用频率大概每天10次以内
方案一应该容易实现,方案二要操作socket,可能复杂些吧?
数据库使用的是Sql server2000,在租用的一台VPS方式的服务器上,有固定IP,客户端需要把数据写入数据库或获取相关数据显示在客户端等
我现在不知道哪个方案好
1.让客户端直接连接数据库
2.另写一个服务器端程序,让客户端通过socket连接服务器端程序,读写数据库由服务端实现注:客户端需要传递的数据量比较大,多的情况下每次可能需要传递500万-1000万字节,大概会有2000左右个客户端,每个客户端使用频率大概每天10次以内
方案一应该容易实现,方案二要操作socket,可能复杂些吧?
解决方案 »
- 求助 picture中绘制一个仪表指针问题
- 定义一个窗体级的ado记录集,在按钮事件中重新open时,是应该先关闭再重新打开呀,还是应该先关闭,再set rs=nothing,然后再重新实例呀?
- VB+SQL数据库打包的问题,救命啊
- 关于datdgrid控件的问题(顺便看看代码有没有问题)
- Access导入Sql的问题?求教
- 让VB程序(包括调用的IE)真正工作在后台,详情见内...
- 在vb中怎样打开局域网中有密码共享的文件夹?
- vb中怎样创建和删除oracle数据表
- 关于一个用ado连接本地access问题!!!
- QueryUnload里面的参数做什么用?
- SQl删除或者更新数据的字段不存在是否报错,怎么处理?
- Adodc控件事件使用!
方案一,对我来说实现没问题,写过很多这种程序,只是这次不一样的地方是客户端比较多,一次传递的数据量也比较大,而且是走广域网,不知道同时有几百个客户端同时发数据的话会不会有什么问题?方案二,主要是我经验比较少,大数据量使用socket传递的话,是不是应该分多次传递,多次的传递如何接收组装,没啥经验,心里没底
SQL Server 2000参考如下:
设置用户连接数,键入或选择一个值(介于 0 到 32767 之间),以设置允许与 SQL Server 实例同时连接的最大用户数量。
设置连接数方法:
在企业管理器中打开Sql Server属性(配置) ,选择“连接”页面,在其中设置连接数我认为数据量大的时候,数据库压力还是很大的。如果是我,就用UDP协议扩展一下用第二种方案。
客户端需要传递的数据量就少了么?我看方案2是多此一举,还是干那些活,如果让服务器多干活的话就在服务器端写存储过程好了。
2000个客户端是所有的,但不会同时连接,现在对winsock发数据的封包拆包不熟悉方案一的话所有客户端都使用同一个数据库的账号去直接连接有没有问题呢?
不过我没有用winsock,后来用web service弄了个.
就通过系统的数据对象直接连接数据来说吧,在面向Internet的网络来说,也有一定
的问题的,比如在 SQL 2000 的数据库,某条数据有 30 MB,然后7个用户同时访问
这条数据,不说 Internet 网络,就是局域网都有可能有一两个点挂掉。如果是数据
量小一点的记录,能承受多少个点同时访问同一条数据这很难做到比较全面的测试。
如果客户用 3G 或 GPRS 方式上网,那要处理比较大量的数据读写也是很困难的事。
总的来说,不出问题就好,如果出问题,这种第三方问题是很难自己解决的。对于自己用Winsock写三层结构的服务程序与客户端来分发任务处理数据库的做法,
扩展性可以很强,可以满足很多自己的需求,但是相对的也会带来很多问题。
1、程序的稳定性
2、系统资源和程序性能的控制
3、数据传输的过程优化
但因为是自己做过程,出了什么问题,自己可以很方便跟中和解决问题,这点要比处理
第三方问题要好一点。就程序的稳定性来说,要做到“稳定”,需要花很大的精力和时间,而 VB 本身自带的
WinSock 控件在 Internet 中表现本来就不是很稳定,不说 2000 个各地的 Internet
用户连接,就 200 个都可能会发现很多问题,如果自己用 API 写过程,在资源控制上
也会有一堆的问题。但这些不是不能解决的问题,只是需要时间和经验。从系统资源和程序性能控制来看,VB这一块比较若,相对来说,VB 要做这种服务程序不是
很适合,如果换开发工具,当然可以解决这个问题,但开发难度也会随之增加。从数据传输的过程优化来看,如果这点不做,对于一些网络环境不好或需要传输稍微大点数据
的开发需求来说,肯定会是个疙瘩,但要解决这个问题又需要了解并掌握一些比较高效的压缩
解压技术。比如使用 PPMD、LZMA 等技术做内存压缩,然后通过握手传输压缩数据,这样可以
提高网络传输数据的效率,不过这种过程要用 VB 来写效果不会太理想。如果要用这种方案,还不如直接用一些 WEB 服务程序,用服务器脚本来实现传输和数据读写
过程。因为网络服务程序的稳定性就不用考虑的,直接交给IIS或阿帕奇等程序去处理,只要
直接写个 COM 组件或接口给脚本调用数据处理过程,客户端无论是使用现成的 HTTP 对象或
自己用写 Sock 客户端,都比较容易处理,稳定性和性能也有一定的保障,开发难度相对要
低很多。
或者此类问题的框架之类的~
不过这一块的三层结构我到做过,服务器端用VC6写NT服务程序和管理用的应用程序,客户
端是用VB写的一个模拟ADO的类,本来想做一个OLEDB提供者程序直接提供给ADO对象访问,
但因为没有完全吃透和时间问题,所以用VB写类的方法实现了一个,数据压缩部分是用VC6
写的一个PPMD压缩解压接口来处理,总的来说,效果还不错。当时是因为客户都在一些偏远
的地方,网络环境不太好,然后需要将客户的资料同步到Internet服务器,为了让这些客户
能够上网,所以只能用3G或GPRS上网,但流量和速度还有大量的数据就会成为很大的问题,
所以弄了这个东西。PPMD的压缩比很高,通常都是10:1的压缩比,有时候还会更高,这段
时间在弄LZMA,据说比PPMD压缩比还高。