多个与单个数据库

时间:2016-12-06 10:27:20

标签: sql-server asp.net-mvc database-design

我们正在开发新版本的Web应用程序。 我们有多个客户(500+),每个客户都有自己的数据库,有自己的数据:用户,产品......

在新版本中,所有客户端都将共享一些数据,例如,用户将在平台中,但每个客户端只能访问其用户,而不是每个客户端都有用户我们希望将所有用户放在集中表中。

产品,订单等其他东西将属于每个客户。

每个客户端都将拥有其域中安装的Web应用程序的副本。 我们的应用程序是ASP MVC实体框架代码,首先使用SQL Server。

我们的问题是:

  • 选项A:每个客户一个数据库,包含其表(产品,订单......)和一个用于存储用户和其他常用数据的公共数据库。

  • 选项B:一个包含所有内容的大型数据库,并将ClientId添加到某些表中,以便客户端只能查看其数据。

PROS AND CONS:

  • 使用选项A我们有几个数据库,我们可以在一个表中拥有100.000个订单,并且很容易检索该数据。另一方面,我们必须处理跨数据库查询并具有2个数据上下文。这是一个问题,因为我们需要检索大多数查询的用户数据,这意味着访问这两个数据库,特定于客户端和公共数据库。

  • 使用选项B,我们只需要处理1个上下文,查询就会简单得多。这种方法的主要关注点是我们每个客户可以拥有一些每年超过10,000条记录的表。因此,在10年内,有500个客户,我们可以拥有一张包含5000万条记录的表,这可能会影响性能。

感谢您的建议。

修改

这里的问题不是单个vs多个数据库的问题,因为我们在游戏中还有一件事,所有客户都需要访问一个公共数据库。

编辑2

假设我们已决定为所有客户提供单一数据库。因此,我们将拥有多个域,每个域都在运行我们的应用程序,但我们需要每个域只获取其数据。

我们怎么做?将ClientId添加到每个表并使用每个站点的web.config中的参数“clientId”过滤数据?

2 个答案:

答案 0 :(得分:0)

我个人的偏好是选项A,主要原因是安全性。您将一个客户的数据泄露给另一个客户的数据基本上只有几个失败点。

您可以将服务放在公共数据之上,并缓存频繁的用户数据请求以处理这方面的事情。

答案 1 :(得分:0)

选项A将是推荐的方法,因为这将允许所有不同的客户端查询他们自己选择的交易记录,并且由于来自其他客户的请求而没有任何性能问题。

此外,选项A将允许基于实体的定制(如果将来需要),这将被证明是对选项B的挑战。基于多租户的架构是建议。

下面提到的资源可以为您提供更多选择/可能性。

https://msdn.microsoft.com/en-us/library/aa479086.aspx