麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
596
2023-04-07
分布式数据库方案,哪个更好 ?
发这个post,我是希望把我的设计想法写出来,给大家评点一下,甚至提出更好方案的,不知道能否放在首页 ?背景: 现在有一web应用程序,使用sqlserver为数据库,但有一些数据库是需要同时存放在本地SQLserver和远端***数据库里的,而且远端有三个***数据库,根据不同的数据类型存放在不同的***数据库 需求: 当用户在web界面上提出群发短信要求时候,web应用程序需要提取本地sqlserver数据库的某群组注册用户的手机号码信息,然后把要发送的信息的同时存储在本地sqlserver数据库表和相应的远端***数据库表,同时本地数据库需要保存每天数据是否成功插入到远端***数据库里了,而且需要操作的数据量是比较大 方案: 我想到的有两种做法,欢迎大家拍砖 一,直接连接数据库 在一个发送方法里,同时直接连接本地sqlserver和远端***数据库,这样操作起来很方便,但这种方法存在的问题如下: 程序需要从本地sqlserver提取的数据量比较大,所以用DataReader会比较好,但Reader打开的时候,连接已被占用,无法同时操作数据库 while(datareader.read()) //读取用户信息 { //构造好的短信内容就不能够再连接本地数据库进行数据插入工作了 //这里还同时需要连接远端***数据库,datareader占用连接的时间会很长 } 如果使用DataSet,想象一下,做一个操作,就需要把几万条记录甚至上10万条记录同时存放在内存中,如果并发数大的情况,简直不敢想象,它要占用多少内存! 二,使用链接服务器和触发器 在本地sqlserver建立三个远端***数据库的链接服务器,然后在短信表中建立insert触发器,web程序只需要把数据插入该表就可以,然后在触发器根据数据类型通过链接服务器插入相应的***数据库表,这种方案的好处就是所有数据操作集中在数据库里,这样程序可以做到,只需要调用一个存储过程,把所有的数据调用,构造,插入全部在数据库里完成 疑惑: 1,两种方案,我更倾向与选择第二种,但我们的项目组对链接服务器各方面的了解甚少,在离项目结束期限还有不到一个月的前提下,采用不熟悉的方案,是否会存在很大的风险 ? 2,第一种方案,我们很熟悉其使用方法,但必须使用DataSet,内存需求太大,并发处理性能很差,而且程序会有崩溃的风险
3,还有更好的方案吗 ? 这几天都在探索不同的实现方案,限于知识面的限制,只能想两种,在此发post,希望各位一起讨论,拍砖,希望能找到比较合理的方案。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。