发布于 2008-11-01 08:21:14
我通常将ClientID添加到所有表中,并使用一个数据库。但是,由于数据库通常很难扩展,我还将使其能够在某些或所有客户端的不同数据库实例上运行。
这样,您就可以在一个数据库中拥有一堆小客户端,而将大客户端放在不同的服务器上。
不过,可维护性的一个关键因素是在所有数据库中保持模式相同。在不引入特定于客户端的模式的情况下管理版本控制将非常麻烦。
发布于 2008-11-01 16:19:49
收听Stackoverflow播客,其中Joel和Jeff谈到了同样的问题。Joel谈到了他们提供软件托管版本的经验。他指出,在整个数据库中添加客户机it会使设计和代码变得复杂(您确定没有意外地忘记将其添加到某些WHERE子句中吗?)并使托管功能复杂化,例如特定于客户端的备份。
那是在第20集或第21集(详情请查看文字记录)。
发布于 2008-11-01 15:58:39
在我看来,这将取决于你可能的客户基础。如果您可能遇到一个主要竞争对手都在使用您的系统的情况,那么您最好使用单独的数据库。它还取决于DBMS如何实现多个数据库。如果每个数据库都有一个单独的基础结构副本,则建议使用单个数据库(或更改DBMS)。如果基础设施的单个副本可以为多个数据库提供服务,那么我会选择独立的数据库。
考虑一下数据库备份。客户A说“请给我寄一份我的数据”。与共享单个数据库相比,在单独的数据库设置中要容易得多。考虑删除一个客户;同样,使用单独的数据库要容易得多。
(例如,“基础设施”部分是含糊其辞的,因为不同的DBMS之间在构成“数据库”和“服务器实例”方面存在重大差异。添加:问题被标记为'mysql',所以这些想法可能并不完全相关。)
Add:还有一个问题--在单个数据库中有多个客户的情况下,每个SQL查询都需要确保为正确的客户选择数据。这意味着SQL将更难写入和读取,DBMS将不得不更加努力地处理数据,索引将变得更大,而且...我真的会为每个客户提供一个单独的数据库,用于许多目的。
显然,StackOverflow (举个例子)对每个用户没有单独的数据库;我们都使用相同的数据库。但是,如果你为不同的公司运行会计系统,我认为共享数据库是不可接受的(对公司来说,也可能不是对法人)。
https://stackoverflow.com/questions/255616
复制相似问题