我正在将我们的客户端-服务器 ERP 应用程序升级到多层。我们希望为我们的客户提供将他们的数据库放在云中的可能性(托管在我们的服务器中)。因此,客户端是用 Delphi 编写的,服务器是一个 http IOCP 服务器,也是用 Delphi 编写的(来自 mORMot 框架),对于我们使用 Firebird 嵌入式的 dbs .
我们的客户(比如说 200 个)可以拥有 25-30 个 Firebird 数据库(总共 5000-6000 个数据库),每个客户有 4-5 个用户访问。这不是一下子发生的。一个用户可以在一个数据库中工作,另外 2 个用户可以在另一个数据库中工作,但所有数据库都应该可用且在线。因此,我可以让 800-1000 个用户以 700-900 dbs 工作。数据库不大,通常每个 20-30 MB,但可以达到 200 MB。
这不是数据分片,所以请不要建议将所有数据库合并在一起,我真的需要它们单独备份/恢复/替换它们中的每一个。
所以,我需要多个连接池 - 对于每个数据库,我需要一个池,比如说 2 个连接。我读到了 Firedac 连接池。看来 TFDManager 对我来说应该是完美的。我用“Pooled=true”定义了多个“ConnectionDef”,它可以维护多个连接池(每个连接持续到几分钟不活动)。
问题:
我必须在服务器开始服务请求之前创建所有“ConnectionDef”吗?
TFDManager 可以“处理”请求(以及不活动时的超时连接),而在其他线程中我需要创建一个新的数据库,因此我需要自动创建一个新的连接池并开始为新创建的数据库提供请求。实际上,我可以在使用其他池时调用 FDManager.AddConnectionDef(..) 吗?