使用VC开发C/S结构的应用,采用VC直接调用远程MYSQL服务器的C API,这种方式跟WEB下面ASP.NET等调用MYSQL的方式在性能上有区别吗?尤其是当并发连接数量较大(过千),且用户每次传送数据量都较大(1M-20M)时,这种赤裸裸地VC调用MYSQL api的方式不知道可行不可行?对数据库底层的东西不擅长,请资深的兄台指教多谢

解决方案 »

  1.   

    使用VC开发C/S结构的应用,采用VC直接调用远程MYSQL服务器的C API,这种方式跟WEB下面ASP.NET等调用MYSQL的方式在性能上有区别吗?   -- 性能上没什么大的区别,asp.net通过ado.net mySQL的驱动, 而C 则直接用 API,理论是API会比ADO.net快一些,但看具体的应用了。[align=center]====  ====
    [/align]
      

  2.   

    尤其是当并发连接数量较大(过千),且用户每次传送数据量都较大(1M-20M)时,这种赤裸裸地VC调用MYSQL api的方式不知道可行不可行?  如果你的应用需求如此,也没办法,只能这样[align=center]====  ====
    [/align]
      

  3.   

    C-API调用比ADO.net快多了。试试便知。
    至于并发访问,也不会造成太多的困难。不过,要注意避免死锁哦,调试存在一定困难。
      

  4.   

    谢谢LiuYann,iiHero。API调用我实现了,但一直担心两个问题:1.安全: CLIENT端的APP都拥有了对数据库的访问权限了,这样干会不会比通过ASP.NET服务器来访问更危险?2.并发连接:由于API调用没采用连接池了,创建连接需要消耗资源,而每次数据通过网络传输直接进入DB又要耗不少时间,而WEB方式是ASP.NET本地或内网告诉把数据送入DB,我这样干的话会不会使得DB资源利用率很低?对底层机制确实不懂,高手指点
      

  5.   

    是不是可在Server端缓存数据再写入数据库不太懂,同问!
      

  6.   

    比ADO的快点。
    不知道你程序端用没有用连接池。
      

  7.   

    谢谢楼上的老大。1.连接池不是放在SERVER端吗
    2.连接数据库的账号和密码都放在本地软件中,这安全性是不是有问题?
      

  8.   

    1.连接池不是放在SERVER端吗
             是放在SERVER端2.连接数据库的账号和密码都放在本地软件中,这安全性是不是有问题?
             安全性有问题,可以被直接用notepad打开你exe文件看到,如果你加密了,也可以直接监听网络IP包看到,除非你设置SSH[align=center]====  ====
    [/align]
      

  9.   

    谢谢liuyann.安全是个问题,而且性能也是问题。本地打开MYSQL连接后,然后开始漫长的网络传输过程,这样连接会占据很长时间,导致数据库利用效率变低。如果我在SERVER端添上个组件,专门接受CLIENT送来的数据,等数据进入服务器了,然后再创建数据库连接送入数据库。一则安全性有保障了,二则性能有保障了。各位帮忙继续批斗我的想法:)
      

  10.   

    VC和MYSQL中间加一个缓存比较好的。你这样频繁的直接操作数据库
      

  11.   

    如果是我,则用 mySQL + PHP,比较容易,效率也好[align=center]====  ====
    [/align]
      

  12.   

    是的,PHP确实好用强大优美而且跟MYSQL堪称绝配,但是如果需要从CLIENT的外设读入数据并将数据送入DB SERVER,这样的架构显然不是PHP/ASP.NET的WEB开发平台可以解决的了。所以我碰到了这个绕头的问题
      

  13.   

    但是如果需要从CLIENT的外设读入数据并将数据送入DB SERVER client 仅把 data 放到 server 的某个目录下,比如ASCII 格式的  client01.txt文件,然后 server 的cron 把数据load到mySQL中[align=center]====  ====
    [/align]
      

  14.   

    谢谢liuyann. 我不懂CRON是什么,刚刚查了下,就是LINUX上的守护服务吗?您有即时通信方式吗,能不能通过站内信告诉我,也许那样请教效率更高点:)
      

  15.   

    比如腾讯的TM里面的群资料共享,用户用TM上传了文件,然后别的用户刷新列表,发现刚上传的文件已经进入列表了,也就是说数据已经放在DB中了。这套流程可以怎样实现?也许靠CRON不能做到实时性。
      

  16.   

    CRON 你可以每分钟load 一次data[align=center]====  ====
    [/align]
      

  17.   

    如果realtime,则跑一个后台进程即可,不停的检查 data file 的 目录,有则load,并move data file to archive folder.[align=center]====  ====
    [/align]
      

  18.   

    数据库中很多表,那么CRON得自己读取数据文件中的信息,然后才能知道送到那个表中? 我很好奇腾讯会是怎样实现的
      

  19.   

    腾讯 是在server 是开一个 进程 打开 listerner (TCP) 然后所有 client requst to this listener, listener 通过TCP receive数据可,先转发出去,同时交给另一进程,写入数据库[align=center]====  ====
    [/align]
      

  20.   

    数据库中很多表,那么CRON得自己读取数据文件中的信息,然后才能知道送到那个表中? 你的client 知不知道数据要放到哪个表? 如果知道,就自然可以分成不同filename, or directory.
    不同的file to 不同的table[align=center]====  ====
    [/align]
      

  21.   


    coooool, smart guy! 看来撞到高手了
      

  22.   


    这确实是个方法。实现起来比较容易,但估计性能比listener+dispatcher的方法要差一些。
      

  23.   

    但 用socket listener 程序比较麻烦,还要考虑容错。用datafile传递,基本不用什么程序了。也不会有数据丢失的顾虑[align=center]====  ====
    [/align]
      

  24.   

    liuyann,我倒是觉得用ACE传输数据,不要关注协议底层的东西(当然不用过多考虑容错的问题了),然后SERVER端直接LISTEN并SEND TO DB,这个思路也许不错。
      

  25.   

    如果再在传输数据中加入加密的认证码,在服务器端的伺服线程用对应的密钥解密,通过认证后再把数据按照数据包中的account信心送入对应的table,这样倒在安全和性能上都得到了最优。
      

  26.   


    liuyann,兄台觉得这个方案可行吗?
      

  27.   

    应该可以把,要看具体的数据量,和你的数据结构,有很多东西要考虑的。[align=center]====  ====
    [/align]
      

  28.   

    遇到同行了,呵呵
    我做的是服务端是MySQL+PHP,
    客户端用VC开发的一个读取USB设备的程序,将读取的数据送入服务器的MySQL数据库中,我是把数据压缩到最小再发给服务器的
      

  29.   

    本帖最后由 yueliangdao0608 于 2008-04-16 14:51:13 编辑