- 主题:这种问题如何设计比较好
程序中有个全局的访问数据库的对象,各个线程对数据库的操作都是通过该对象进行(并发),某些时候可能存在数据库访问异常的情况(比如连接断开了),因此需要重置该对象,那么重置的操作如何进行而不会导致重置的过程中有其他线程调用该对象而产生问题。目前能想到的两个可能的方案是:
1 对该对象的调用地方处处加锁。
2 将所有对该对象的访问加入任务队列,调用逐一完成,如果重置,则完成之前后续任务不进行。
不知道有没有更加优雅和高效的方式。
--
FROM 101.228.58.*
有推荐的吗
【 在 hothail 的大作中提到: 】
: 找一个第三方的数据库链接池子
--
FROM 101.228.58.*
就是连接池?
【 在 z16166 的大作中提到: 】
: pool内部维护多个connecion,再加一个queue就行吧。多个connection同时断的话,那是谁也没辙的
: 可能还要刷queue到disk cache
--
FROM 101.228.58.*
异步操作
单个操作带状态
【 在 ziqin 的大作中提到: 】
: 1.用户对这个对象的操作是同步操作还是异步操作?
: 2.单个操作是否带状态?
: 先问自己实际应用场景是什么,不要一来就什么模式,虽然大家灌水最喜欢回答什么模式
: ...................
--
FROM 101.228.58.*
第二种方式也有问题,总体感觉和第一个本质类似,表面上有所差异,比如某个操作访问数据库比较耗时,那么会导致后面的任务被拖累。
【 在 foliver 的大作中提到: 】
: 首先,不存在选择的问题。如果你们软件架构本身就是异步模式,那就选第二种。如果你们没有异步模式,那就只能第一种同步阻塞。
: 其次,数据库访问层本身就该屏蔽这种差异 ,调用者应该无感的。
:
--
FROM 101.228.58.*
用的是mssql,需要并发
【 在 z16166 (Netguy) 的大作中提到: 】
: 对啊
:
: 正常情况下,你的需求越明确,越好讨论
:
--
FROM 101.228.58.*