优点/缺点使用多个数据库与使用单个数据库

Sat*_*ish 14 c# sql-server winforms rackspace-cloud

我需要设计一个Windows应用程序,它代表SQL Server中的多个"客户".每个客户都拥有相同的数据模型,但它是独立的.

什么是优点/缺点使用多个数据库与使用单个数据库.

哪一个是完成这项工作的最佳方式.如果要使用单个数据库,那么将采取哪些措施.

编辑:

一件事是数据库将托管在云(rackspace)帐户中.

Gar*_*ker 14

不要将来自多个客户的数据存储在同一个数据库中 - 我知道公司必须花费大量时间/精力/金钱来解决这个错误.即使数据库是分开的,我甚至知道客户也不愿共享数据库计算机 - 从好的方面来说,这些客户通常愿意为额外的硬件付费.

  1. 安全问题本身就会阻止你做这件事.因此,您将失去大客户.

  2. 如果您有一些客户不愿意升级他们的软件,那么如果您共享一个数据库可能会非常困难.单独的数据库允许客户继续使用旧的数据库结构,直到他们准备好升级.

  3. 您正在人为地限制可以为您的解决方案提供显着可伸缩性的自然数据分区.多个小客户仍然可以共享数据库服务器,他们只看到自己的数据库/目录,或者他们可以在不同的数据库服务器/实例上运行.

  4. 您使数据库设计变得复杂,因为您必须区分本来会自然分离的客户数据,即必须在每个where子句上提供CustomerID.

  5. 通过在所有表中包含更多行,您使数据库变慢.您将更快地耗尽数据库内存,因为CustomerID现在是每个索引的一部分,并且每个索引节点中可以存储的记录更少.由于丧失了参考局部性的固有优势,您的数据库也会变慢.

  6. 1个客户的数据回滚可能非常困难,甚至可能在数据库增长时基本上不可能 - 您需要自定义过程来执行此操作,这比从备份进行简单和标准的还原要慢得多且资源密集.

  7. 大型数据库会是非常困难的备份/及时恢复,可能需要对硬件的额外支出,以使其足够快.

  8. 您使用数据库的应用程序将难以维护和测试.

  9. 任何错误都可能更具破坏性,因为你可以通过一个错误搞砸所有客户.

  10. 通过将数据库强制到单个位置,可以防止可能的低延迟性能增强.例如,海外客户将一直使用缓慢,高延迟的网络.

  11. 您将被称为愚蠢的DBA,或失业的DBA,或两者兼而有之.

但是,共享数据库设计有一些优点.

  1. 公共表模式,代码表,存储过程等只需要维护并存储在1个位置.

  2. 在某些情况下,许可成本可能会降低.

  3. 一些维护更容易,但使用组合方法几乎肯定更糟.

  4. 如果所有/大多数客户端都非常小,则可以通过不组合服务器来降低资源利用率(即成本相对较高).您可以通过将客户端与其权限和明确的理解相结合来降低高成本,但仍然为较大的客户端使用单独的数据库.在这种情况下,您肯定需要明确地与您的客户保持联系.

除了服务器成本分摊之外,这仍是一个非常糟糕的想法 - 但成本也是一个非常重要的方面.这实际上是这种方法的唯一理由 - 尽管如此,避免这种情况.也许你会更好地为你的产品改变一点,或者只是不能以便宜的价格支持小客户.


ang*_*son 5

我假设有多个客户,您不仅在存储客户信息,还为客户的应用程序托管数据库,例如 CRM 系统。

如果是这样,那么我绝对不会将所有内容都存储在同一个数据库中。

原因:

  • 备份,当一个客户打电话说,他需要恢复一个备份,因为实习设法清理生产数据库,而不是测试数据库,你希望在同一时间处理所有其他客户
  • 安全性,即使应用程序中存在错误,它也无法访问其他客户的数据。另外,请考虑一个客户是否在他们自己的安全考虑方面过于放松并且将密码或其他内容泄露给系统,如果黑客发现了进入该客户数据库的方法,请考虑是否也包括您托管的所有其他客户的后果.
  • 政治,一些客户不允许将他们的数据与其他客户混合,即使您可以 100% 保证不会(意外地)将对其数据的访问权授予其他客户

所以底线:单独的数据库