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