具有数百个数据库连接的 MVC 应用程序
Posted
技术标签:
【中文标题】具有数百个数据库连接的 MVC 应用程序【英文标题】:MVC Application with hundreds of database connections 【发布时间】:2013-10-31 13:46:43 【问题描述】:我正在为我们的客户群构建一个应用程序,所有这些客户群都有预先存在的数据库。企业主将能够通过此应用读取和报告其本地企业数据库,所有数据都将特定于他们的业务。
我打算做以下事情:
创建“主”帐户数据库以存储有关我们所有客户帐户的信息 将现有数据库上传到我们的服务器解决方案 登录时,检查帐户 db 并加载适当的 db 以在客户端会话中持续存在我的问题是,是否最好将每个数据连接作为新条目放入 web.config 中,并在整个应用程序中从会话变量中引用连接字符串,即:
客户端 A 登录 -> 使用数据库 A -> 将 DB_A_Connstring 存储为会话变量 客户端 B 登录 -> 使用数据库 B -> 将 DB_B_Connstring 存储为会话变量或者有更好的方法吗?感谢您的意见。
编辑:我会注意到每个数据库都有一个 GUID,我会不断地根据帐户凭据验证连接,所以我不太担心这种方法的安全性,只是它作为一个可行的选项来实现。
【问题讨论】:
【参考方案1】:您多久会添加/删除数据库?如果很少,web.config 应该没问题。如果经常,我只会将 conn 字符串存储到 web.config 中的 master 数据库中,并将每个客户端数据库的详细信息存储在那里的表中。
尽管再次阅读您的问题后,“数百”对我来说意味着将它们存储在一个表中而不是 Web.config 中,即使它们从未更新过。我根本不希望配置文件中有那么多硬编码字符串。
【讨论】:
是的,理想情况下,我们希望自动化整个设置过程......我们将每天/每周添加新的数据库,因此将数据库信息存储在帐户数据库中可能更聪明接近 一个快速的问题...如果我将所有客户端数据库信息存储在帐户数据库中,我是否不需要将所有数据库连接信息存储在该用户的会话变量中,可能会暴露凭据以及他们连接时的所有数据? 没有理由将其存储在会话变量中。默认线程池将为您缓存所有连接,并根据 conn 字符串匹配它们。因此,只需正常创建/处理连接(使用从主数据库加载的字符串),来自同一公司的用户将受益于与同一数据库的循环连接。 那么以编程方式更改 connstring,它应该在整个会话期间持续存在吗?这听起来像是双赢……我要测试一下,然后回来给你一个大的绿色支票。感谢您的建议 是的,只有字符串,连接将基于每个查询以上是关于具有数百个数据库连接的 MVC 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Blazor WASM 异常导致数百个额外的套接字和连接异常
使用 Impala 选择具有通配符模式的多个表并将它们连接起来