我们维护一个位于多租户 SQL Server 数据库之上的软件即服务 (SaaS) Web 应用程序。系统中有大约 200 个表,其中最大的只有 100 多列,最后看看数据库的大小约为 10 GB。我们有大约 25 家客户公司使用该应用程序,每个都输入他们的数据并运行报告。
单实例架构对我们来说非常有效——我们能够设计和开发每月发布给所有客户的新功能。每个客户端体验都可以通过使用功能切换、数据字典定制、CSS 皮肤等进行配置。
我们的典型客户是一家拥有多个分支机构、一个总部,有时还拥有自己的内部 IT 软件开发团队的公司。
我们现在面临的问题是,一些客户正在开展他们自己的内部项目,以基于我们多租户数据库中当前存储的数据开发报告、数据仓库和仪表板。我们认为这些项目的数量和复杂程度可能会随着时间的推移而增加,我们希望有效地满足它。
目前,我们有一个“精简版”解决方案,通过该解决方案,我们公开了一个安全的 XML Web 服务,客户端可以调用该 Web 服务从表中获取其记录的完整下载。他们指定表,我们将其映射到一个专门构建的存储过程,该过程返回固定数量的列。目前,客户在一夜之间将大约 20 个表提取到他们管理的本地 SQL 数据库中。一些客户在其中一些表中有数万条记录。
这种“精简”方法有几个缺点:1)每个客户端都需要开发和维护自己的数据拉取机制,处理所有日志记录、错误处理等。2)我们的数据库模式在不断扩展和变化。他们调用的存储过程具有固定数量的列,但有时当我们扩展现有列(例如,将 varchar(50) 转换为 varchar(100))时,它们的 pull 会失败,因为它突然超过了本地的列大小数据库。3) 我们开始为每个客户及其特定的下载期望积累数百个不同的存储过程,这是管理上的麻烦。4) 我们正在努力满足客户对更多数据的要求。我们提供一个“shell”模式(即我们的数据库副本,其中没有数据)并要求他们选择他们需要提取的表。
很抱歉这个冗长的问题,但我正在寻找的是其他团队已经成功解决这个问题的方法。我们希望以他们最容易使用的方式安全地向他们公开所有数据,但又不会陷入不断协商数据交换和模式更改后清理的过程中。
什么对你有用?
谢谢,
迈克尔