我正在为企业解决方案编写数据适配器。
为了使其可扩展,我将其设计为:
- 有一个接口定义了所有数据方法的签名
- 该接口在各种低级适配器中实现,方法在这些适配器中实现,这些适配器如 SqlAdapter、OracleAdapter、MySqlAdapter、XmlAdapter 等。它们在 2MB 左右并不是很大。
- 我创建了一个外观层,它在运行时使用配置调用与底层适配器绑定并调用它的方法。
- 这个外观在消费者之间共享,他们可以在不知道底层适配器的情况下调用使用它的方法。
- 要创建一个门面,我必须创建这个门面单吨。
为了使其可扩展,我采用了以下方法
将这种单吨模式更改为基于多实例(工厂模式),使实例数量可配置(对象池)。使用异步执行底层方法(使用异步等待)。
仅使用 Single Ton 实例,但使用 Semaphore 处理并发请求数。异步执行底层方法(使用异步等待),使用连接池,以便对底层方法的异步调用可以使用到数据库的多个连接。
问题:1)如果我选择创建多个实例的第一种方法,它会更快吗?加载底层适配器不会花费更多时间,因此它会比第二种方法慢吗?如果我克隆对象怎么办?
2)如果我选择第二种方法会更快吗?由于 Single Ton 对象仅中继请求和响应,因此后台的所有工作都将是异步的。
考虑到对象重新/加载,哪种方法在性能方面更好?还是有其他好的方法?假设每秒向服务器发送 1000 个请求。